개발자이야기/MS-SQL

MS-SQL 누적 합계가 특정 값을 처음으로 초과하는 시점

퐈니스타일 2024. 7. 2. 13:48
-- 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을 처음으로 초과하는 시점을 찾는 쿼리를 작성해 보겠습니다.

쿼리 작성

  1. 첫 번째 단계: 누적 합계를 계산합니다.
  2. 두 번째 단계: 누적 합계가 1000을 처음으로 초과하는 시점을 찾습니다.

 

 

+------------+--------+-----------------+
|    Date    | Amount | CumulativeAmount|
+------------+--------+-----------------+
| 2024-07-04 |  400   |      1050       |
+------------+--------+-----------------+

 

  • CumulativeSales CTE는 각 날짜별로 누적 매출 금액을 계산합니다.
  • FirstExceedingPoint CTE는 누적 금액이 1000을 초과하는 모든 레코드를 포함하며, ROW_NUMBER를 사용해 날짜 순으로 번호를 매깁니다.
  • 최종 SELECT 문은 ROW_NUMBER 값이 1인 첫 번째 레코드를 선택하여, 누적 금액이 처음으로 1000을 초과하는 시점을 찾습니다.

이 예제를 통해 MSSQL에서 누적 합계가 특정 값을 처음으로 초과하는 시점을 찾는 방법을 이해할 수 있습니다.

 

 

 

728x90
반응형