如何解决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 举报,一经查实,本站将立刻删除。