Мне нужно иметь возможность найти минимальную дату из набора дат, которые соответствуют следующим критериям.
3 даты, которые находятся в пределах 180 дней друг от друга. Логика c, которую я предполагаю, будет применяться, заключается в том, что каждая дата будет индексом, с которым сравниваются последующие даты. Я могу сделать это, используя функции LAG и Window, если есть две даты. но требуется найти минимальную дату, когда 3 события вписываются в 180-дневное окно и группируются по GROUP_ID.
Тестовые данные:
DROP TABLE #EVENT_COUNT
CREATE TABLE #EVENT_COUNT
(
[DATE] DATE
,[GROUP_ID] INT
);
INSERT INTO #EVENT_COUNT
SELECT '2011-01-01',1
UNION ALL SELECT '2011-02-01',1 UNION ALL SELECT '2011-03-01',1
UNION ALL SELECT '2011-04-01',1 UNION ALL SELECT '2011-05-01',1
UNION ALL SELECT '2011-06-01',1 UNION ALL SELECT '2011-07-01',1
UNION ALL SELECT '2011-08-01',1 UNION ALL SELECT '2011-09-01',1
UNION ALL SELECT '2011-10-01',1 UNION ALL SELECT '2011-11-01',1
UNION ALL SELECT '2011-12-01',2 UNION ALL SELECT '2012-01-01',2
UNION ALL SELECT '2012-02-01',2 UNION ALL SELECT '2012-03-01',2
UNION ALL SELECT '2012-04-01',2 UNION ALL SELECT '2012-05-01',2
UNION ALL SELECT '2012-06-01',2 UNION ALL SELECT '2012-07-01',2
UNION ALL SELECT '2012-08-01',2 UNION ALL SELECT '2012-09-01',2
UNION ALL SELECT '2012-10-01',2 UNION ALL SELECT '2012-11-01',2
UNION ALL SELECT '2012-12-01',2;
SELECT * FROM #EVENT_COUNT;
Это таблица, которая создал:
DATE |GROUP_ID
---------------------
2011-01-01 |1<<This date
2011-02-01 |1
2011-03-01 |1
2011-04-01 |1
2011-05-01 |1
2011-06-01 |1
2011-07-01 |1
2011-08-01 |1
2011-09-01 |1
2011-10-01 |1
2011-11-01 |1
2011-12-01 |2 << This date
2012-01-01 |2
2012-02-01 |2
2012-03-01 |2
2012-04-01 |2
2012-05-01 |2
2012-06-01 |2
2012-07-01 |2
2012-08-01 |2
2012-09-01 |2
2012-10-01 |2
2012-11-01 |2
2012-12-01 |2
В результате мне нужны две жирные цифры, сгруппированные по GROUP_ID:
DATE |GROUP_ID
---------------------
2011-01-01 |1<<This date
2011-12-01 |2 << This date
Любая помощь очень ценится.