2011-07-25 4 views
1

私は一意のIDフィールド、ユーザーIDフィールド、および日付フィールドを持つテーブルを持っています。現在のレコードから28日以内に一致するレコードが存在するかどうかを確認します

私がしたいのは、同じユーザーIDを持つ次の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 
関連する問題