Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL组中上一个/下一个日期时间不相等_Sql_Sql Server_Window Functions - Fatal编程技术网

SQL组中上一个/下一个日期时间不相等

SQL组中上一个/下一个日期时间不相等,sql,sql-server,window-functions,Sql,Sql Server,Window Functions,我有一个由以下人员创建的表: CREATE TABLE #table1 ( category INT, event_id VARCHAR(MAX), event_time DATETIME ) INSERT INTO #table1 VALUES (1, 'event1', '2021-01-12 19:00:00'), (1, 'event2', '2021-01-12 19:00:00'), (2, 'event3', '2021-01-12 19:00:00'),

我有一个由以下人员创建的表:

CREATE TABLE #table1
(
    category INT,
    event_id VARCHAR(MAX),
    event_time DATETIME
)

INSERT INTO #table1
VALUES
(1, 'event1', '2021-01-12 19:00:00'),
(1, 'event2', '2021-01-12 19:00:00'),
(2, 'event3', '2021-01-12 19:00:00'),
(2, 'event4', '2021-01-12 19:30:00'),
(2, 'event5', '2021-01-12 22:30:00'),
(2, 'event6', '2021-01-12 22:30:00'),
(1, 'event7', '2021-01-12 19:30:00'),
(1, 'event8', '2021-01-12 19:30:00'),
(2, 'event9', '2021-01-12 22:30:00'),
(1, 'event10', '2021-01-12 20:00:00')
其结果是:

category    event_id    event_time
------------------------------------------------
1           event1      2021-01-12 19:00:00.000
1           event2      2021-01-12 19:00:00.000
2           event3      2021-01-12 19:00:00.000
2           event4      2021-01-12 19:30:00.000
2           event5      2021-01-12 22:30:00.000
2           event6      2021-01-12 22:30:00.000
1           event7      2021-01-12 19:30:00.000
1           event8      2021-01-12 19:30:00.000
2           event9      2021-01-12 22:30:00.000
1           event10     2021-01-12 20:00:00.000
我想添加两个新列:
time\u of theu next\u event\u in_group
time\u of theu previous\u event\u in_group
(我认为这是不言自明的)

我尝试使用
LAG
/
LEAD
进行此操作,但当组中的上一个事件具有相同的
事件时间时,此操作实际上不起作用。为清楚起见,我们需要下一个/上一个事件的时间,该事件的
event\u time
不同。预期结果将是:

category    event_id    event_time                  time_of_previous_event_in_group time_of_next_event_in_group
-----------------------------------------------------------------------------------------------------------------------
1           event1      2021-01-12 19:00:00.000     NULL                            2021-01-12 19:30:00.000
1           event2      2021-01-12 19:00:00.000     NULL                            2021-01-12 19:30:00.000
2           event3      2021-01-12 19:00:00.000     NULL                            2021-01-12 19:30:00.000
2           event4      2021-01-12 19:30:00.000     2021-01-12 19:00:00.000         2021-01-12 22:30:00.000
2           event5      2021-01-12 22:30:00.000     2021-01-12 19:30:00.000         NULL
2           event6      2021-01-12 22:30:00.000     2021-01-12 19:30:00.000         NULL
1           event7      2021-01-12 19:30:00.000     2021-01-12 19:00:00.000         2021-01-12 20:00:00.000
1           event8      2021-01-12 19:30:00.000     2021-01-12 19:00:00.000         2021-01-12 20:00:00.000
2           event9      2021-01-12 22:30:00.000     2021-01-12 19:30:00.000         NULL
1           event10     2021-01-12 20:00:00.000     2021-01-12 19:30:00.000         NULL

我认为下一个查询可能会有所帮助:

SELECT 
    t.category,
    t.event_id,
    t.event_time,
    MAX(b.event_time) AS time_of_previous_event_in_group,
    MIN(a.event_time) AS time_of_next_event_in_group
FROM table1 t
LEFT JOIN table1 b ON t.category = b.category AND t.event_time > b.event_time
LEFT JOIN table1 a ON t.category = a.category AND t.event_time < a.event_time
GROUP BY t.category, t.event_id, t.event_time
ORDER BY LEN(t.event_id), t.event_id;

如果你不能用窗口功能来实现这一点,那真是太遗憾了,但这种方式很有效——谢谢!
+==========+==========+=========================+=================================+=============================+
| category | event_id | event_time              | time_of_previous_event_in_group | time_of_next_event_in_group |
+==========+==========+=========================+=================================+=============================+
| 1        | event1   | 2021-01-12 19:00:00.000 | (null)                          | 2021-01-12 19:30:00.000     |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 1        | event2   | 2021-01-12 19:00:00.000 | (null)                          | 2021-01-12 19:30:00.000     |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 2        | event3   | 2021-01-12 19:00:00.000 | (null)                          | 2021-01-12 19:30:00.000     |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 2        | event4   | 2021-01-12 19:30:00.000 | 2021-01-12 19:00:00.000         | 2021-01-12 22:30:00.000     |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 2        | event5   | 2021-01-12 22:30:00.000 | 2021-01-12 19:30:00.000         | (null)                      |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 2        | event6   | 2021-01-12 22:30:00.000 | 2021-01-12 19:30:00.000         | (null)                      |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 1        | event7   | 2021-01-12 19:30:00.000 | 2021-01-12 19:00:00.000         | 2021-01-12 20:00:00.000     |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 1        | event8   | 2021-01-12 19:30:00.000 | 2021-01-12 19:00:00.000         | 2021-01-12 20:00:00.000     |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 2        | event9   | 2021-01-12 22:30:00.000 | 2021-01-12 19:30:00.000         | (null)                      |
+----------+----------+-------------------------+---------------------------------+-----------------------------+
| 1        | event10  | 2021-01-12 20:00:00.000 | 2021-01-12 19:30:00.000         | (null)                      |
+----------+----------+-------------------------+---------------------------------+-----------------------------+