【发布时间】:2014-05-20 20:13:34
【问题描述】:
我想要做的是提出一个查询,该查询可以给出初始事件后 30 天内重复的百分比,但仅将 30 天内的任何事件计为一次重复。这是一个人的样本数据集:
人员 日期
══════════════
一个 2014 年 3 月 1 日
一个 2014 年 3 月 21 日
一个 2014 年 3 月 29 日
一个 2014 年 4 月 14 日
一个 2014 年 4 月 17 日
在这种情况下,3/21 将是重复事件,而 3/29 不会被计为一秒。 4/14 将是下一个窗口的开始,4/17 是第二次重复。
这里要计算重复的百分比,分子是当月发生初始事件并且在 30 天内发生后续事件的人的不同计数。分母是当月发生事件的人的不同数量。在跨月的情况下,重复计算在初始事件的月份内。
我知道我可以想出一些使用循环/光标或临时表的东西,但是随着数据集的增长,这将需要很长时间。有人对如何将其作为单个查询执行此操作有任何想法吗?它可能会涉及到几个 CTE。到目前为止我想出的一切都失败了。
【问题讨论】:
-
对我来说,很难掌握你想要做什么。什么是初始事件?什么是重复?什么是跨月?
-
将初始事件视为启动时钟。从那里开始,如果在 30 天内有另一个条目,则视为重复。问题是,如果在 30 天内有多个条目,则在这 30 天结束之前,它们不会算作额外的重复,也不会重新开始计时。跨越一个月意味着为了计算的目的,初始事件的月份是您计算重复的月份(即,如果在 3/30 和 4/2 有一个事件,那么重复将计入 3 月和另一个初始事件要到 4/30 才能发生)。如果您还需要我进一步澄清,请告诉我。
标签: sql sql-server tsql sql-server-2008-r2