2011-07-25 101 views
1

我有一個唯一ID字段,用戶ID字段和日期字段的表。檢查當前記錄的28天內是否存在匹配記錄

我想要做的是有一個列標誌,如果在接下來的28天內有相同用戶標識的記錄。

這只是未來我在看,而不是過去的記錄..

id | uid | date  | future 
1 | 342 | 23/10/2007 | 1 
2 | 342 | 3/11/2007 | 0 
3 | 342 | 20/2/2009 | 0 
4 | 147 | 22/2/2009 | 0 

這是結果後,我是一個基本的例子。

我使用的是MSSQL 2008

回答

3

下面的查詢將返回符合要求的行。如果你願意,你可以從這個查詢創建一個視圖,這樣你就可以在未來的行上運行其他查詢。

SELECT id, uid, date FROM orders current 
WHERE EXISTS 
(
    SELECT * from orders future 
    WHERE future.date < DateAdd(DAYS, 28, current.date) 
    AND future.date > getdate() 
    AND future.uid = current.uid 
) 
+0

作品十分感謝 – Matt

1

這裏的另一種選擇

SELECT id, uid, DATE, 
    CASE WHEN MIN(daterange) BETWEEN 0 AND 28 THEN 1 ELSE 0 END 
FROM 
    (
    SELECT m1.id, m1.uid, m1.date, DATEDIFF(DD, m1.date, m2.date) AS daterange 
    FROM MyTable m1 
    LEFT OUTER JOIN MyTable m2 ON m1.uid = m2.uid 
     AND m1.id <> m2.id 
     AND m1.date <= m2.date 
) x 
GROUP BY id, uid, DATE 
ORDER BY id