Mic*_*ier 6 mysql sql sqlite postgresql timestamp
我有一个表,列出了某些对象的事件.
有两个事件:"运动"和"负载".它们可以开始和结束,并且这些事件在发生时列出时间戳.
现在我要计算以下三个数字:
我在这里为这个问题创建了一个sqlfiddle:
end前两列计算相应事件之间的差异start。(求和是可交换的,因此我们不需要实际匹配相应的事件。)
第三列搜索movement start前一个事件load是其load start事件的事件,以及movement end后一个load事件是其load end事件的事件。
SELECT (SELECT SUM(timestamp)
FROM Table1
WHERE event = 'movement end') -
(SELECT SUM(timestamp)
FROM Table1
WHERE event = 'movement start') AS all_movement,
(SELECT SUM(timestamp)
FROM Table1
WHERE event = 'load end') -
(SELECT SUM(timestamp)
FROM Table1
WHERE event = 'load start') AS all_load,
(SELECT SUM(timestamp)
FROM Table1 a
WHERE event = 'movement end' AND
(SELECT event
FROM Table1 b
WHERE timestamp = (SELECT min(timestamp)
FROM Table1 c
WHERE c.timestamp >= a.timestamp
AND c.event LIKE 'load %')
) = 'load end') -
(SELECT SUM(timestamp)
FROM Table1 a
WHERE event = 'movement start' AND
(SELECT event
FROM Table1 b
WHERE timestamp = (SELECT max(timestamp)
FROM Table1 c
WHERE c.timestamp <= a.timestamp
AND c.event LIKE 'load %')
) = 'load start') AS load_movement;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |