检查当前记录的28天内是否存在匹配记录

时间:2011-07-25 02:55:16

标签: sql sql-server sql-server-2008

我有一个包含唯一ID字段,用户ID字段和日期字段的表。

我想要做的是有一个列,用于标记在接下来的28天内是否存在具有相同用户ID的记录。

这只是我正在看的未来,而不是过去的记录..

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

2 个答案:

答案 0 :(得分: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
)

答案 1 :(得分: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