我有此要求,以转换帐户有效日期列表,以提供每个日期序列和日期之间的日期的有效开始日期和结束日期。例如,这是两个帐户的有效日期列表。
这是必需的结果集,显示日期序列的开始和结束以及这些日期之间的天数。
但是,如何真正做到这一点一直令人困惑。有人做过吗?
这里有一些带有示例数据的代码。
*b = a
拖放表格dbo.account_active;
创建表dbo.account_active( account_active_id int Identity(1,1), account_id int, active_date日期);
插入dbo.account_active( 帐户ID, active_date) 价值观 (1,'2019-01-01'), (1,'2019-01-02'), (1,'2019-01-03'), (1,'2019-01-06'), (1,'2019-01-07'), (1,'2019-01-08'), (1,'2019-01-09'), (1,'2019-01-10'), (1,'2019-01-11'), (1,'2019-01-28'), (1,'2019-01-29'), (1,'2019-01-30'), (1,'2019-01-31'), (2,'2019-01-16'), (2,'2019-01-25'), (2,'2019-01-26');
选择 aa.account_id, aa.active_date 从 dbo.account_active as aa;
答案 0 :(得分:3)
这是一个差距和孤岛问题
也许这会有所帮助。
示例
Select Account_ID
,Active_Date_Start = min(Active_Date)
,Active_Date_End = max(Active_Date)
,Days_Active = DateDiff(DAY,min(Active_Date),max(Active_Date))+1
From (
Select *
,Grp = DateDiff(DAY,'1900-01-01',active_date)
- Dense_Rank() over (Partition By Account_id Order by Active_Date)
From account_active
) A
Group By Account_id,Grp
Order by Account_id,min(Active_Date)
返回
Account_ID Active_Date_Start Active_Date_End Days_Active
1 2019-01-01 2019-01-03 3
1 2019-01-06 2019-01-11 6
1 2019-01-28 2019-01-31 4
2 2019-01-16 2019-01-16 1
2 2019-01-25 2019-01-26 2