2016-11-18 33 views
0

我的表看起来像这样:如何删除取决于上一列列 - PostgreSQL的

action | timespan 
------ | ------ 
start | NULL 
------ | ------ 
finish | 00:10:30 
------ | ------ 
start | 00:05:00 
------ | ------ 
start | 00:00:01 
------ | ------ 
abort | 00:05:20 
------ | ------ 
abort | 00:12:33 

重复动作从后端来了,但我仍然需要一个尽可能准确的时间跨度 因此,我需要删除其来之前的动作 让每一个开始(开始)具有结束后每个重复动作(结束/中止) 像这样

action | timespan 
------ | ------ 
start | NULL 
------ | ------ 
finish | 00:10:30 
------ | ------ 
start | 00:05:00 
------ | ------ 
abort | 00:05:20 
------ | ------ 

这是可能的postgresql和如果是的如何?

+0

你解决问题了吗? – fafl

回答

0

看看lag函数。

例如:

SELECT a.* 
FROM (
    SELECT 
    action, 
    lag(action) over() as last_action, 
    timespan 
    FROM foo 
) AS a 
WHERE a.last_action IS NULL OR a.action <> a.last_action 
+0

它有点解决意识到问题是事件重叠 –