我使用的是PostgreSQL 9.2。
我有一个包含设备停止服务时间的表格。
+----------+----------+---------------------+
| event_id | device | time |
+----------+----------+---------------------+
| 1 | Switch4 | 2013-09-01 00:01:00 |
| 2 | Switch1 | 2013-09-01 00:02:30 |
| 3 | Switch10 | 2013-09-01 00:02:40 |
| 4 | Switch51 | 2013-09-01 03:05:00 |
| 5 | Switch49 | 2013-09-02 13:00:00 |
| 6 | Switch28 | 2013-09-02 13:01:00 |
| 7 | Switch9 | 2013-09-02 13:02:00 |
+----------+----------+---------------------+
我希望将行按照+/-3分钟的时间差分组,如下所示:
+----------+----------+---------------------+--------+
| event_id | device | time | group |
+----------+----------+---------------------+--------+
| 1 | Switch4 | 2013-09-01 00:01:00 | 1 |
| 2 | Switch1 | 2013-09-01 00:02:30 | 1 |
| 3 | Switch10 | 2013-09-01 00:02:40 | 1 |
| 4 | Switch51 | 2013-09-01 03:05:00 | 2 |
| 5 | Switch49 | 2013-09-02 13:00:00 | 3 |
| 6 | Switch28 | 2013-09-02 13:01:00 | 3 |
| 7 | Switch9 | 2013-09-02 13:02:00 | 3 |
+----------+----------+---------------------+--------+
我尝试使用窗口函数来实现,但是在子句中出现了问题。
[ RANGE | ROWS ] BETWEEN frame_start AND frame_end, 其中frame_start和frame_end可以是以下之一: UNBOUNDED PRECEDING、value PRECEDING、CURRENT ROW、value FOLLOWING、UNBOUNDED FOLLOWING。 value必须是一个整数表达式,不包含任何变量、聚合函数或窗口函数。
考虑到这一点,我无法指示时间间隔。现在我怀疑窗口函数是否能够解决我的问题。你能帮我吗?