Postgres交替组查询

Postgres alternating group query

鉴于我有 table:

my_table

id INT
bool BOOLEAN

还有一些数据:

1, true
2, true
3, false
4, true
5, true
6, false
7, false
8, false
9, true
...

我怎样才能 SELECT 只找到当前行的 ID 和前一行的 ID 之间的 bool 值发生变化的行?

在这种情况下,我希望结果如下所示:

1, true
3, false
4, true
6, false
9, true
...

您可以使用 lag():

select t.*
from (select t.*, lag(bool) over (order by id) as prev_bool
      from mytable t
     ) t
where t.bool <> prev_bool;