微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Active Rejected 记录计数每周使用日期逻辑

如何解决SQL Active Rejected 记录计数每周使用日期逻辑

我有状态,我需要每周查找活动计数、拒绝计数和新+活动计数:(如果某个 ID 甚至在特定周的一天/分钟内都处于活动状态,则应将其计入该周的活动中。因此,如果它在一周内被拒绝,它将计入该周的活动计数中,并计入下周的拒绝计数中)。 此外,任何记录在拒绝计数中仅计为一个(不是在每周),而活动记录在每周的 Active 指标中计数。 (例如:如果一条记录从 1/1/ 到 12/31 处于活动状态,它将被计入所有周 53 次,而如果记录从 1/1/ 到 12/31 被拒绝,它将被计入仅一周 1/1 周或 1/8 周。如果此 ID 在 1/1 周内活跃一分钟,则拒绝将在 1/8 周内计数,否则在该周内1/1)

ID  Start_Date      End_Date            Status      New_ID
1   1/1/2018 2:00       11/23/2019 4:00     Active      Yes
1   11/23/2019 4:00 2/7/2020 12:23      Rejected    No
1   2/7/2020 12:23  4/7/2021 23:45      Active      No
1   4/7/2021 23:45  12/31/9999          Rejected    No

2   2/2/2019 1:23       5/7/2019 3:20           Active      Yes
2   5/7/2019 3:20       3/12/2020 16:22     Rejected    No
2   3/12/2020 16:22 12/31/9999          Active      No
3   5/7/2020        3/12/2021 2:28      Active      Yes
3   3/12/2021 2:28  12/31/9999          Rejected    No

Date_Dim:

Year    week    Date 
2018    1   1/1/2018
2018    1   1/2/2018
2018    1   1/3/2018
…
2019    6   2/1/2019
2019    6   2/2/2019
2019    6   2/3/2019
….
2019    19  5/6/2019
2019    19  5/7/2019
2019    19  5/8/2019
…
2019    20  5/13/2019
…
2019    46  11/22/2019
2019.   46  11/23/2019
2019    46  11/24/2019
..
2019    47  11/29/2019

输出

Year    Week    Active  Rejected    New
2018    1   1   0       1
2018    2   1   0       0
2018    3   1   0       0
….
2019    6   2   0       1
….
2019    19  2   0       0
2019    20  1   1       0
….

我正在尝试以下查询(但这仅用于活动状态并需要大量时间):

select year,week,count(distinct ID) from MainTable MT JOIN Date_Dim DD on DD.Date >=cast(MT.Start_date as date) AND date<=cast(MT.END_DATE as date) AND MT.status='Active'
 group by 1,2 Order by 1,2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。