次のようなテーブルがあります。
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
GROUP BY
6 という数字が与えられた場合、このテーブルで を実行し、前後の 6 時間のウィンドウ内で重複する時間をマージしようとしています。したがって、上記の表では、時間範囲が重複しているため、行1
と行2
が 1 つの行にマージされます。
John 2012-01-01 06:00:01.000 2012-01-01 18:00:02.000
行4
と5
は、 から 6 時間を引く07:01:01.000
と行 のウィンドウに収まるため、マージされます4
。
約100万行を含む大きなテーブルでこれを行う良い方法はありますか?