【发布时间】:2020-09-07 16:32:36
【问题描述】:
我有以下示例表(为简单起见提供了单个 ID - 需要对所有 ID 执行相同的逻辑)
ID Visit_date
-----------------
ABC 8/7/2019
ABC 9/10/2019
ABC 9/12/2019
ABC 10/1/2019
ABC 10/1/2019
ABC 10/8/2019
ABC 10/15/2019
ABC 10/17/2019
ABC 10/24/2019
这是我获取示例输出所需的内容
-
在“new_visit”列中将第一次访问标记为 1
-
将后续日期与第一个日期进行比较,直到超过 21 天的条件。示例 9 月 10 日与 8 月 7 日相比,它不在 8 月 7 日之后的 21 天内,因此这被视为另一个 new_visit,因此将 new_visit 标记为 1
-
然后,我们将 9 月 10 日与具有 21 天标准的后续日期进行比较,并将所有这些日期标记为 9 月 10 日访问的后续日期。例如。 9 月 12 日、10 月 1 日为 9 月 10 日后的 21 天内;因此它们被视为后续访问,因此将“follow_up”标记为 1
-
如果后续日期超过上一次新访问的 21 天标准(例如 10 月 8 日与 9 月 10 日相比),则 10 月 8 日将被视为新访问并将“New_visit”标记为 1,随后的日期将与 10 月进行比较8
样本输出:
Dates New_Visit Follow_up
-----------------------------
8/7/2019 1
9/10/2019 1
9/12/2019 1
10/1/2019 1
10/1/2019 1
10/8/2019 1
10/15/2019 1
10/17/2019 1
10/24/2019 1
【问题讨论】:
-
请使用适当的数据库平台编辑问题和标签。谢谢
-
那么,您的意思是,如果有人在 22 天内每天都访问,那么第 22 天将是“新”访问?
-
另外,有用的提示,请不要使用
M/d/yyyy的格式作为日期;这使得使用数据变得非常困难。 -
请试一试,向我们展示您的尝试。
-
这个问题已经回答了。非常感谢 GMB 和 Gordon!
标签: sql sql-server datetime window-functions recursive-query