我需要一些帮助来构建一个查询,以便只撤回在一定天数之后的重复,在我的情况下为30。
我的表格结构如下:
PatientID Date
1 2015-09-01
1 2015-09-03
2 2015-03-04
2 2015-03-07
2 2015-09-15
在这个例子中,我只想返回第1,3和5行。
我尝试自己做左连接,其中第二个日期是> DATEADD(d,30,日期)。
我的另一个想法是递归CTE,第一个查询拉动每个患者的最小日期,然后是一个联合,其中表格日期比每个患者CTE日期的最大值至少30天但是你不能加入声明中的最大值。
我很难过。任何建议都将不胜感激。
答案 0 :(得分:2)
我就是这样做的:
SELECT * FROM MyTable t1
WHERE NOT EXISTS(
SELECT * FROM MyTable t2
WHERE t1.PatientId=t2.PatientId
AND t2.Date < t1.Date
AND DATEDIFF(dd, t2.Date, t1.Date) < 30
)
ORDER BY t1.PatientId, t1.Date ASC
答案 1 :(得分:0)
我认为这样的事情应该有用(记事本编码在这里,所以语法可能有点偏离)
WITH CTE(
SELECT PatientId, Min(Date) as Date
FROM MyTable
Group BY PatientId)
SELECT A.*
FROM MyTable A
LEFT OUTER JOIN CTE CTE
ON A.PatientId = CTE.PatientId
AND (A.Date = CTE.Date OR A.Date > DATEAdd(dd, 30, CTE.Date)
WHERE CTE.PatientId IS NOT NULL