Мне нужно найти все события, произошедшие после последнего перерыва в 30 дней или более, без события. Мой текущий запрос находит только первый разрыв в 30 дней. Если нет промежутков в 30 дней или более, я использую дату по умолчанию, чтобы вернуть все строки.
Я также должен быть осторожен, чтобы не возвращать ни одного экземпляра события, если это событие старше 30 дней.
Учитывая следующие события, самое последнее событие после последнего 30-дневного разрыва должно быть 30.06.2011, но мой запрос возвращает 4/13/2011
EventDate EventType
========= =========
4/13/2011 1
5/20/2011 1
6/30/2011 1
DECLARE @DefaultDate DATETIME
SET @DefaultDate = '1/1/2011'
SELECT ISNULL(MAX(EventDate), @DefaultDate)
FROM Events e
WHERE
e.EventType = 1
AND NOT EXISTS (SELECT 1
FROM Events
WHERE EventType = 1
AND DATEDIFF(dd,EventDate, e.EventDate) ) > 30
)