【发布时间】:2019-09-02 05:17:45
【问题描述】:
我有一张包含 PatientID、DiagnosisID 和 Date 列的表格。这种情况是,如果患者在一个月内多次来诊进行相同的诊断,则只有日期差大于或等于 3 的行应计为该特定月份的就诊次数。
例子:
RowNumber PatientID DiagnosisID DiagnosisDate
1 P1 D1 29-12-2018
2 P1 D1 01-01-2019
3 P1 D1 05-01-2019
4 P1 D1 06-01-2019
5 P1 D1 08-01-2019
6 P1 D1 09-01-2019
7 P1 D1 13-01-2019
8 P1 D1 31-01-2019
9 P1 D1 01-02-2019
10 P1 D1 07-02-2019
2018 年 12 月的访问次数应计为 1
DateDiff>=3 在第 1 行和第 2 行之间(12 月 29 日和 1 月 1 日)因此是 1 月 1 日 是有效的访问。
DateDiff>=3 在第 2 行和第 3 行之间(1 月 1 日和 1 月 5 日),因此第 5 行 一月是有效的访问。
DateDiff
DateDiff=3 所以 1 月 8 日是新的有效访问,前面的行应该 与 1 月 8 日进行比较。
DateDiff
DateDiff>=3 在第 6 行和第 7 行之间(1 月 13 日和 1 月 9 日),因此第 13 行 一月是新的有效访问。
DateDiff>=3 在第 7 行和第 8 行之间(1 月 31 日和 1 月 13 日),因此是第 31 行 一月是新的有效访问。
DateDiff
DateDiff>=3 在第 9 行和第 10 行之间(2 月 7 日和 2 月 1 日),因此第 7 行 2 月是一次有效的访问。
最终输出:
Dec-2018 visit count = 1 (29th Dec)
Jan-2019 visit count = 5 (1, 5, 8, 13 & 31st Jan)
Feb-2019 visit count = 1 ( 7th Feb )
基本上当前行和上一行之间的 Datediff 应该更大 大于等于 3,如果此条件为假,则当前行应为 与之前的有效访问相比。
我已经尝试使用递归 CTE 来实现它,但我无法做到 找到一个终止条件,即比较应该在之前停止 有效访问。
【问题讨论】:
标签: sql sql-server