选择复发只有当至少在X天过去上一页
问题描述:
我需要一些帮助的结构化查询,只拉回来是在设定的天数后复发,在我的案件30选择复发只有当至少在X天过去上一页
我的表结构如下: :
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天,但是您不能连接语句中的最大值。
我很难过。任何建议将不胜感激。
答
这是我会怎么做:
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
答
我觉得这样的事情应该工作(记事本编码在这里,所以语法可能是一个小关)
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
的SQL版本服务器你在用吗?你可以使用'LAG' – ughai