我想根據每個服務合同的開始和結束日期的表格計算用戶擁有有效合同的天數。我想計算任何活動的時間,無論客戶是否同時有 1 份或 5 份有效合同。
--------- ------------- ------------ ------------
| USER_ID | CONTRACT_ID | START_DATE | END_DATE |
--------- ------------- ------------ ------------
| 1 | 14 | 18.02.2021 | 18.04.2022 |
| 1 | 13 | 02.01.2019 | 02.01.2020 |
| 1 | 12 | 01.01.2018 | 01.01.2019 |
| 1 | 11 | 13.02.2017 | 13.02.2019 |
| 2 | 23 | 19.06.2021 | 18.04.2022 |
| 2 | 22 | 01.07.2019 | 01.07.2020 |
| 2 | 21 | 19.01.2019 | 19.01.2020 |
--------- ------------- ------------ ------------
結果我想要一張桌子:
--------- --------------------
| USER_ID | DAYS_BEEING_ACTIVE |
--------- --------------------
| 1 | 1477 |
| 2 | 832 |
--------- --------------------
在哪里
1477 代表 1053(從 13.02.2017 到 02.01.2020 的天數 - 用戶在此期間有活躍的合約) 424(從 18.02.2021 到 18.04.2022 的天數)
832 代表 529(從 19.01.2019 到 01.07.2020 的天數) 303(從 19.06.2021 到 18.04.2022 的天數)。
我嘗試了一些帶有連接、日期差異、條件條件的查詢,但沒有任何效果。我將不勝感激任何幫助。
uj5u.com熱心網友回復:
如果您沒有 Tally/Numbers 表(強烈推薦),您可以使用 ad-hoc tally/numbers 表
示例或dbFiddle
Select User_ID
,Days = count(DISTINCT dateadd(DAY,N,Start_Date))
from YourTable A
Join ( Select Top 10000 N=Row_Number() Over (Order By (Select NULL))
From master..spt_values n1, master..spt_values n2
) B
On N<=DateDiff(DAY,Start_Date,End_Date)
Group By User_ID
結果
User_ID Days
1 1477
2 832
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/459831.html
