簡體   English   中英

T-SQL - 聚合(最小/最大日期)考慮時間順序 - SQL Server 2012

[英]T-SQL - Aggregate (MIN/MAX date) considering chronological sequence - SQL Server 2012

我無法想象如何使用 t-sql 解決我的問題。

  • 考慮到時間順序和數字,我需要具有不同時間塊的表中的 MIN(ValidFrom) 和 MAX(ValidTo)。
  • 正常組將不起作用,因為 num 100 的 MIN(ValidFrom) 和 MAX(ValidTo) 將不正確。
  • 我無法想象如何使用 t-sql 中的任何分析或排名 function 從該表中獲得預期結果。

我需要下表中的最小和最大日期。

有效自 有效 編號 身份證號
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM