2016-02-26 33 views
1

我需要一些幫助的結構化查詢,只拉回來是在設定的天數後復發,在我的案件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天,但是您不能連接語句中的最大值。

我很難過。任何建議將不勝感激。

+0

的SQL版本服務器你在用嗎?你可以使用'LAG' – ughai

回答

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 
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 
相關問題