[英]T-SQL - Aggregate (MIN/MAX date) considering chronological sequence - SQL Server 2012
我無法想象如何使用 t-sql 解決我的問題。
我需要下表中的最小和最大日期。
有效自 | 有效 | 編號 | 身份證號 |
---|---|---|---|
2019-06-01 | 2019-12-31 | 100 | 01234567 |
2020-01-01 | 2020-03-31 | 100 | 01234567 |
2020-04-01 | 2020-12-31 | 100 | 01234567 |
2021-01-01 | 2021-01-31 | 100 | 01234567 |
2021-02-01 | 2021-03-31 | 50 | 01234567 |
2021-04-01 | 2021-09-30 | 50 | 01234567 |
2021-10-01 | 2021-12-31 | 50 | 01234567 |
2022-01-01 | 2022-04-30 | 100 | 01234567 |
查詢的預期結果:
有效自 | 有效 | 編號 | 身份證號 |
---|---|---|---|
2019-06-01 | 2021-01-31 | 100 | 01234567 |
2021-02-01 | 2021-12-31 | 50 | 01234567 |
2022-01-01 | 2022-04-30 | 100 | 01234567 |
可以根據 2 ROW_NUMBER
計算排名。
一旦你有了排名,就很容易匯總。
SELECT MIN(ValidFrom) AS ValidFrom, MAX(ValidTo) AS ValidTo, Num, [ID Number] FROM ( SELECT *, Rnk = ROW_NUMBER() OVER (PARTITION BY [ID Number] ORDER BY ValidFrom, ValidTo) + ROW_NUMBER() OVER (PARTITION BY [ID Number], Num ORDER BY ValidFrom DESC, ValidTo DESC) FROM your_table ) q GROUP BY [ID Number], Num, Rnk ORDER BY [ID Number], MIN(ValidFrom)
有效自 | 有效 | 編號 | 身份證號 |
---|---|---|---|
2019-06-01 | 2021-01-31 | 100 | 1234567 |
2021-02-01 | 2021-12-31 | 50 | 1234567 |
2022-01-01 | 2022-04-30 | 100 | 1234567 |
db<> 在這里擺弄
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.