SQL-排序后,仅返回列中具有某些连续值的行

时间:2018-10-30 01:15:28

标签: sql postgresql

我有name, timestamp, doing列。我已经按name,然后按timestamp进行了排序,我希望在具有相同doing的组中将name列下移看起来像{{1} }-A, A, A, B, B, A, A, ...A的交替序列。从BB过渡后,我只需要得到包含第一A行的行,在同名的组中

B

我想回来

name timestamp doing
1    1         A
1    2         A
1    3         B
1    4         B
1    5         A
2    2         B
2    4         A
2    6         B
2    8         A

但是不是

name timestamp doing
1    3         B
2    6         B

因为它不是2 2 B 内从AB的过渡

1 个答案:

答案 0 :(得分:1)

我认为您只想要lag()

select t.*
from (select t.*,
             lag(doing) over (partition by name order by timestamp) as prev_doing
      from t
     ) t
where prev_doing = 'A' and doing = 'B';