我有一个包含唯一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
答案 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