我有一个包含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在第一行和第二行(12月29日至1月1日)之间,因此是1月1日 是有效的访问。
DateDiff> = 3在第二行和第三行之间(1月1日至1月5日),因此是第5行 Jan是有效的访问。
DateDiff <= 3在第3行和第4行(1月5日至1月6日)之间,因此是第6行 Jan不是有效的访问。
DateDiff <= 3,位于第4行和第5行(1月6日至1月8日)之间,因此是第8行 应该将1月与之前的有效访问(即1月5日)进行比较 datediff> = 3,因此1月8日是新的有效访问,因此前面的行应 与1月8日进行比较。
DateDiff <= 3在第5行和第6行(1月8日至1月9日)之间,因此是第9行 Jan不合法。
DateDiff> = 3在第6行和第7行(1月13日至1月9日)之间,因此是第13行 Jan是新的有效访问。
DateDiff> = 3在第7行和第8行(1月31日至1月13日)之间,因此是第31行 Jan是新的有效访问。
DateDiff <= 3,位于第8行和第9行(2月1日至1月31日)之间,因此为1st 2月的访问无效。
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来实现它,但是我无法 找到终止条件,即比较应该在前一个条件处停止 有效的访问。
答案 0 :(得分:0)
使用LAG函数测试DATEDIFF
WITH test_tab as
(
select RowNumber, PatientID, DiagnosisID, DiagnosisDate,
DATETIFF(day, lag(PlantFK,1,'19900101') OVER (PARTITION BY PatientID, DiagnosisID order by DiagnosisDate),DiagnosisDate) days
from table
)
Select * from test_tab ;
过滤器> = 3
WITH test_tab as
(
select RowNumber, PatientID, DiagnosisID, DiagnosisDate,
DATETIFF(day, lag(PlantFK,1,'19900101') OVER (PARTITION BY PatientID, DiagnosisID order by DiagnosisDate),DiagnosisDate) days
from table
)
Select * from test_tab WHERE days>=3
并按年/月分组
WITH test_tab as
(
select RowNumber, PatientID, DiagnosisID, DiagnosisDate,
DATETIFF(day, lag(PlantFK,1,'19900101') OVER (PARTITION BY PatientID, DiagnosisID order by DiagnosisDate),DiagnosisDate) days
from table
)
Select YEAR(DiagnosisDate) year,Month(DiagnosisDate) montch,Count(RowNumber)
from test_tab
WHERE days>=3
GROUP BY YEAR(DiagnosisDate) ,Month(DiagnosisDate)