我有一个名为raw_data
的表,其中包含以下数据
您可以看到id
1和2在字段desa
,kecamatan
和kabupaten
以及id
3,4,5中共享相同的值。
所以基本上我想选择所有未跟随相同先前值的行。预期结果将是:
我知道在PHP
等任何编程语言中都很容易做到这一点,但我需要在postgresql中使用它。这可行吗?在此先感谢。
答案 0 :(得分:1)
假设更高的id表示最新的行,如果所有三列相同的行不在一起,并且您不想过滤它,因为它没有与前一行相同的值(order by id或created_date),然后您可以使用分析lag()
函数:
select *
from (
select
t.*,
case
when desa = lag(desa) over (order by id)
and kecamatan = lag(kecamatan) over (order by id)
and kabupaten = lag(kabupaten) over (order by id)
then 0 else 1
end flag
from your_table t
) t where flag = 1;