我有一个带有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最后产出:
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 )基本上,当前行和prev行之间的Datediff应该大于3,如果此条件为false,则应将当前行与之前的有效访问进行比较。
我尝试过用递归的CTE实现它,但是我无法找到一个终止条件,即比较应该在之前的有效访问中停止。
发布于 2019-04-11 15:31:57
用滞后函数测试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 ;filtler >=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)https://stackoverflow.com/questions/55634717
复制相似问题