У меня есть таблица вроде этого:Как я могу объединить перекрывающиеся времена в окне?
CREATE TABLE #TEMP (Name VARCHAR(255), START_TIME datetime, END_TIME datetime);
INSERT INTO #TEMP VALUES('John', '2012-01-01 09:00:01', '2012-01-01 12:00:02')
INSERT INTO #TEMP VALUES('John', '2012-01-01 09:40:01', '2012-01-01 11:00:02')
INSERT INTO #TEMP VALUES('John', '2012-01-02 05:00:01', '2012-01-02 05:15:02')
INSERT INTO #TEMP VALUES('David', '2012-01-04 05:00:01', '2012-01-04 05:15:02')
INSERT INTO #TEMP VALUES('David', '2012-01-05 07:01:01', '2012-01-05 15:15:02')
SELECT *
FROM #TEMP
DROP TABLE #TEMP
И данные:
Name START_TIME END_TIME
1 John 2012-01-01 09:00:01.000 2012-01-01 12:00:02.000
2 John 2012-01-01 09:40:01.000 2012-01-01 11:00:02.000
3 John 2012-01-02 05:00:01.000 2012-01-02 05:15:02.000
4 David 2012-01-04 05:00:01.000 2012-01-04 05:15:02.000
5 David 2012-01-05 07:01:01.000 2012-01-05 08:15:02.000
Учитывая ряд говорят, 6, я пытаюсь сделать GROUP BY
на эту таблицу и слейте раз, которые перекрываются в течение 6 часов до и после. Таким образом, в приведенной выше таблице, строки 1
и 2
будут объединены в одну строку, поскольку они содержат перекрывающиеся временной диапазон:
John 2012-01-01 06:00:01.000 2012-01-01 18:00:02.000
Ряды 4
и 5
будут объединены, потому что вычитание 6 часов от 07:01:01.000
падает в окно ряд 4
.
Есть ли хороший способ сделать это на большом столе, содержащем около миллиона строк?
Я думаю, что у вас есть ошибка в тексте anwer. Когда вы говорите, что строка 1 становится до 06: 00: 01.000 - 18: 00: 02.000 не 03: 00: 01.000 - 18: 00: 02.000? (09:00 - 6 часов = 03:00, а не 06:00) – danihp