【发布时间】:2020-12-07 02:07:28
【问题描述】:
我有一个名为 measure_stat 的表,其格式如下:
id sensor_name timestamp value_cal
1 measurement_status 2020-07-28 16:00:00 start_measurement
2 measurement_status 2020-07-28 17:00:00 stop_measurement
3 measurement_status 2020-07-28 18:00:00 start_measurement
4 measurement_status 2020-07-28 19:00:00 stop_measurement
5 measurement_status 2020-07-28 20:00:00 start_measurement
...
我想创建一个返回这个的视图:
id start_measurement stop_measurement
1 2020-07-28 16:00:00 2020-07-28 17:00:00
2 2020-07-28 18:00:00 2020-07-28 19:00:00
...
我该怎么做? 我试过这样做:
CREATE VIEW start_times AS
SELECT timestamp AS start_measurements FROM measurement_stat
WHERE sensor_name = 'measurement_stat' AND value_cal = 'start_measurement'
然后我对 stop_times 做同样的事情。最后,我对刚刚创建的两个 VIEW 执行了 LEFT OUTER JOIN。
这可行,但是有问题。如果出现问题,有时在获取数据时,我们必须停止测量,有时“stop_measurement”不会记录。所以有一个 start_measurement 没有关联的 stop_measurement。 这个问题使我的 VIEW 关闭并且列变得不同步。如果这种情况开始经常发生,那么问题只会更加复杂并变得更糟。
有没有办法在 SQL 中处理这个问题?如果有 2 个连续的“开始”而中间没有“停止”,我可以用 NULL 代替“stop_measurement”,那就太好了
【问题讨论】:
-
如果有两个连续的
stop_measurement记录你想要什么? -
这种情况不太可能发生,因为我们只能在测量开始时停止测量。但是,如果发生这种情况,我想在 2 个 stop_measurement 记录之间为 start_measurement 填写一个 NULL。
标签: sql postgresql window-functions gaps-and-islands sql-view