希望有人可以幫助我解決這個問題。
我有以下示例資料集:
| MEM_ID | CLM_ID | ADM_DT | DCHG_DT |
|---|---|---|---|
| 1 | 111 | 01-01-2020 | 02-01-2020 |
| 1 | 112 | 03-01-2020 | 04-01-2020 |
| 1 | 113 | 04-01-2020 | 05-01-2020 |
| 1 | 114 | 06-01-2020 | 07-01-2020 |
| 2 | 211 | 01-01-2020 | 02-01-2020 |
| 2 | 212 | 05-01-2020 | 08-01-2020 |
| 3 | 311 | 02-01-2020 | 03-01-2020 |
| 3 | 312 | 03-01-2020 | 05-01-2020 |
| 3 | 313 | 05-01-2020 | 06-01-2020 |
| 3 | 314 | 07-01-2020 | 08-01-2020 |
我正在嘗試基于 MEM_ID 創建分組。如果 ADM_DT 等于先前的 DCHG_DT,則記錄應組合在一起
以下是預期的輸出:
| MEM_ID | CLM_ID | ADM_DT | DCHG_DT | GROUP_ID |
|---|---|---|---|---|
| 1 | 111 | 01-01-2020 | 02-01-2020 | 1 |
| 1 | 112 | 03-01-2020 | 04-01-2020 | 2 |
| 1 | 113 | 04-01-2020 | 05-01-2020 | 2 |
| 1 | 114 | 06-01-2020 | 07-01-2020 | 3 |
| 2 | 211 | 01-01-2020 | 02-01-2020 | 1 |
| 2 | 212 | 05-01-2020 | 08-01-2020 | 2 |
| 3 | 311 | 02-01-2020 | 03-01-2020 | 1 |
| 3 | 312 | 03-01-2020 | 05-01-2020 | 1 |
| 3 | 313 | 05-01-2020 | 06-01-2020 | 1 |
| 3 | 314 | 07-01-2020 | 08-01-2020 | 2 |
我嘗試了以下方法:
select DISTINCT MEM_ID
,CLM_ID
,ADM_DT
,DCHG_DT
,CASE WHEN ADM_DT = LAG(DCHG_DT) OVER(PARTITION BY MEM_ID ORDER BY ADM_DT, DCHG_DT) THEN 0 ELSE 1 END AS ISSTART
FROM
table
這會產生這樣的東西:
| MEM_ID | CLM_ID | ADM_DT | DCHG_DT | 開始 |
|---|---|---|---|---|
| 1 | 111 | 01-01-2020 | 02-01-2020 | 1 |
| 1 | 112 | 03-01-2020 | 04-01-2020 | 1 |
| 1 | 113 | 04-01-2020 | 05-01-2020 | 0 |
| 1 | 114 | 06-01-2020 | 07-01-2020 | 1 |
| 2 | 211 | 01-01-2020 | 02-01-2020 | 1 |
| 2 | 212 | 05-01-2020 | 08-01-2020 | 1 |
| 3 | 311 | 02-01-2020 | 03-01-2020 | 1 |
| 3 | 312 | 03-01-2020 | 05-01-2020 | 0 |
| 3 | 313 | 05-01-2020 | 06-01-2020 | 0 |
| 3 | 314 | 07-01-2020 | 08-01-2020 | 1 |
我還查看了其他外部資源,例如https://www.kodyaz.com/t-sql/sql-query-for-overlapping-time-periods-on-sql-server.aspx
這讓我非常接近,但我意識到作者使用的是遞回 CTE,而 Netezza 不支持該功能。
最終,我想創建這些分組,以便我可以合并到我正在使用的原始表中,并根據每個 MEM_ID 的分配組對值求和。
預先感謝您提供的任何幫助。
uj5u.com熱心網友回復:
嘗試這個:
select MEM_ID, CLM_ID, ADM_DT, DCHG_DT,
sum(ISSTART) over(partition by MEM_ID order by ADM_DT, DCHG_DT rows unbounded preceding) as GROUP_ID from
(select MEM_ID
,CLM_ID
,ADM_DT
,DCHG_DT
,CASE WHEN ADM_DT = LAG(DCHG_DT) OVER(PARTITION BY MEM_ID ORDER BY ADM_DT, DCHG_DT) THEN 0 ELSE 1 END AS ISSTART
FROM
table_name) t
小提琴
基本上使用您的ISSTARTin asum來獲得所需的輸出。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429420.html
上一篇:SQLServer-將特定字串日期格式轉換為日期資料型別
下一篇:將NULL視為MAX日期
