-- Step 1: Calculate cumulative sales amounts
WITH CumulativeSales AS (
SELECT
Date,
Amount,
SUM(Amount) OVER (ORDER BY Date) AS CumulativeAmount
FROM
Sales
)
-- Step 2: Find the first point where cumulative amount exceeds 1000
, FirstExceedingPoint AS (
SELECT
Date,
Amount,
CumulativeAmount,
ROW_NUMBER() OVER (ORDER BY Date) AS RowNum
FROM
CumulativeSales
WHERE
CumulativeAmount > 1000
)
-- Step 3: Select the first row where cumulative amount exceeds 1000
SELECT
Date,
Amount,
CumulativeAmount
FROM
FirstExceedingPoint
WHERE
RowNum = 1;
먼저, 예제 데이터를 갖고 있는 Sales 테이블이 아래와 같다고 가정합니다.
Sales 테이블
+------------+--------+
| Date | Amount |
+------------+--------+
| 2024-07-01 | 200 |
| 2024-07-02 | 300 |
| 2024-07-03 | 150 |
| 2024-07-04 | 400 |
| 2024-07-05 | 250 |
+------------+--------+
이 테이블에서 누적 매출 금액이 1000을 처음으로 초과하는 시점을 찾는 쿼리를 작성해 보겠습니다.
쿼리 작성
- 첫 번째 단계: 누적 합계를 계산합니다.
- 두 번째 단계: 누적 합계가 1000을 처음으로 초과하는 시점을 찾습니다.
+------------+--------+-----------------+
| Date | Amount | CumulativeAmount|
+------------+--------+-----------------+
| 2024-07-04 | 400 | 1050 |
+------------+--------+-----------------+
- CumulativeSales CTE는 각 날짜별로 누적 매출 금액을 계산합니다.
- FirstExceedingPoint CTE는 누적 금액이 1000을 초과하는 모든 레코드를 포함하며, ROW_NUMBER를 사용해 날짜 순으로 번호를 매깁니다.
- 최종 SELECT 문은 ROW_NUMBER 값이 1인 첫 번째 레코드를 선택하여, 누적 금액이 처음으로 1000을 초과하는 시점을 찾습니다.
이 예제를 통해 MSSQL에서 누적 합계가 특정 값을 처음으로 초과하는 시점을 찾는 방법을 이해할 수 있습니다.
728x90
반응형