반응형
    
    
    
  ID 및 날짜를 기준으로 한 Row_number
연속된 날짜가 있는 ID를 기준으로 비활성화된 데이터를 선택해야 합니다.
Sample Data:
2020-04-19,SQA0199,ACTIVE
2020-04-20,SQA0199,INACTIVE
2020-04-21,SQA0199,INACTIVE
2020-04-22,SQA0199,INACTIVE
2020-04-23,SQA0199,ACTIVE
2020-04-24,SQA0199,INACTIVE
2020-04-25,SQA0199,INACTIVE
2020-04-26,SQA0199,INACTIVE
 
Sample Script:
SELECT
  ROW_NUMBER() OVER (PARTITION BY SQA_ID ORDER BY timestamp) AS "row number",
  timestamp, SQA_ID
FROM SQA_SMS_INACTIVE where status='INACTIVE';
 
Desire Output:
2020-04-20,SQA0199,1
2020-04-21,SQA0199,2
2020-04-22,SQA0199,3
2020-04-24,SQA0199,1
2020-04-25,SQA0199,2
2020-04-26,SQA0199,3
 
스크립트의 출력은 행 번호에 계속 표시됩니다.이것 좀 도와주세요
와 함께LAG()그리고.SUM()window 함수에서는 행 번호의 기반이 되는 행 그룹을 만들 수 있습니다.
WITH 
  pre AS (
    SELECT *,
      DATEDIFF(
        timestamp,
        LAG(timestamp) OVER (PARTITION BY SQA_ID ORDER BY timestamp)
      ) <> 1 AS flag 
    FROM SQA_SMS_INACTIVE 
    WHERE status = 'INACTIVE'  
  ),
  cte AS (
    SELECT timestamp, SQA_ID,
      SUM(COALESCE(flag, 0) <> 0) OVER (PARTITION BY SQA_ID ORDER BY timestamp) grp
    FROM pre
  )  
SELECT timestamp, SQA_ID,
  ROW_NUMBER() OVER (PARTITION BY SQA_ID, grp ORDER BY timestamp) AS `row number`
FROM cte  
 
데모를 참조해 주세요.
결과:
| timestamp  | SQA_ID  | row number |
| ---------- | ------- | ---------- |
| 2020-04-20 | SQA0199 | 1          |
| 2020-04-21 | SQA0199 | 2          |
| 2020-04-22 | SQA0199 | 3          |
| 2020-04-24 | SQA0199 | 1          |
| 2020-04-25 | SQA0199 | 2          |
| 2020-04-26 | SQA0199 | 3          |
언급URL : https://stackoverflow.com/questions/61771569/row-number-based-on-the-id-and-date
반응형
    
    
    
  'it-source' 카테고리의 다른 글
| MySQL에 코멘트를 추가하려면 어떻게 해야 하나요? (0) | 2022.11.19 | 
|---|---|
| fork()의 목적은 무엇입니까? (0) | 2022.11.19 | 
| Model->where('id', Array)의 여러 조건을 실행할 수 있습니까? (0) | 2022.11.19 | 
| VueJ: Vue에서 계산된 "set/get"을 사용합니다.드래그 가능 및 VueX (0) | 2022.11.19 | 
| 인덱스를 사용하지 않고 중복 삽입 방지 (0) | 2022.11.19 |