为多个日期集群 SQL

问题描述 投票:0回答:0

我需要在 SQL 中找到客户注册集群的最早日期。客户可以在 90 天内注册多项服务,但这都被视为一个“事件”。我需要返回满足特定条件的第一个注册(date1),然后确定 date1 之后至少 90 天的下一个最短日期(date2),然后我想确定 date2 之后至少 90 天的下一个最短日期(日期 3),依此类推。我们的客户经常进出系统,因此随着时间的推移会有这些集群注册,我需要确定每个集群的开始。对于每个客户的集群注册的每个开始日期,我想要一行。

这里是一个客户注册日期的示例,以及应该从查询中返回哪些行。集群中的每个最小日期应该是下一条记录的 90 天计数的起点。查询本身会稍微复杂一些,因为我还需要它只查看表中其他列具有特定值的记录。

日期 包含在输出中?
2017 年 8 月 24 日是
9/1/2017 否
2/27/2018 是
2018 年 3 月 1 日 否
8/10/2018 是
2018 年 8 月 16 日没有
12/14/2018 是
12/6/2019 是
6/4/2020 是
2020 年 9 月 13 日 是
2022 年 1 月 11 日 是
2/22/2022 否
2022 年 4 月 28 日 是
2022 年 5 月 20 日 否
2023 年 3 月 22 日 是

更新:有人为我提供了一个起点,但我知道我翻译的有点不对,因为我遇到了错误。这是我正在尝试的:

与 CEEnrolls AS(
SELECT row_number() over (order by Blend_PersonalID, EnrollmentEntryDate) rn, Blend_PersonalID id, EnrollmentEntryDate 来自 e_PROD.Enrollment e
其中 e.Perspective = 'Client' AND e.EnrollmentEntryDate > '12/31/2016' AND e.ProjectTypeName = 'Coordinated Assessment'),

rec (rn, id, dt, ldt, yesno) AS (
选择 rn, id, EnrollmentEntryDate, EnrollmentEntryDate, 1
来自 CEEnrolls c
其中 rn = 1

联合所有
选择 c.rn, c.dt,
当 c.dt > ldt + 90 然后 c.dt 否则 rec.ldt 结束时,
当 c.dt > ldt + 90 然后 1 结束时的情况
从记录
加入 CEEnrolls c on c.rn = rec.rn + 1)

选择 id、dt、yesno
从记录

sql date client cluster-analysis
© www.soinside.com 2019 - 2024. All rights reserved.