2011-07-25 59 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