我已经搜索了stackoverflow,但是我没有发现任何提及根据不同日期合并两行记录的问题。
我有这张桌子。
ID Timestamp State
6 2016-02-03 07:13 End
5 2016-02-02 21:09 Start
4 2016-02-02 9:10 End
3 2016-02-01 21:10 Start
2 2016-02-01 6:30 End
1 2016-01-31 23:40 Start
所以过程' A'从2016-01-31 23:40
开始,在2016-02-01 6:30
停止,依此类推。我想以这种方式显示它:
Start Time End Time
2016-01-31 23:40 2016-02-01 6:30
2016-02-01 21:10 2016-02-02 9:10
2016-02-02 21:09 2016-02-03 07:13
Start
和End
代码之间还有其他记录。
你能告诉我怎么解决吗?我正在尝试在WAMP服务器上获得解决方案。
答案 0 :(得分:2)
如果查询较少,那么你的表现会更好......
SELECT x.timestamp start
, MIN(y.timestamp) end
FROM my_table x
JOIN my_table y
ON y.timestamp > x.timestamp
AND y.state = 'end'
WHERE x.state = 'start'
GROUP
BY x.timestamp;
答案 1 :(得分:2)
如果ID没有间隙,您可以在ID< =>上使用自我加入id + 1,但依靠技术ID这样的东西通常是一个坏主意。您可以通过为所有开始和所有结束提供行号并加入这些来做同样的事情。或者在where子句中使用简单的子选择:
select
timestamp as start_time,
(
select min(timestamp)
from mytable ends
where ends.state = 'End'
and ends.timestamp > starts.timestamp
) as end_time
from mytable starts
where state = 'Start'
order by timestamp;