Проверьте, существует ли соответствующая запись в течение 28 дней после текущей записи - PullRequest
1 голос
/ 25 июля 2011

У меня есть таблица с уникальным полем идентификатора, полем идентификатора пользователя и полем даты.

То, что я хочу сделать, это иметь столбец, который помечает, если есть запись в течение следующих 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

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Следующий запрос вернет строки, соответствующие вашему требованию.Если вы хотите, вы можете создать представление из этого запроса, чтобы вы могли выполнять другие запросы только для будущих строк.

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 голос
/ 25 июля 2011

Вот еще один вариант

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...