查找3列中未跟随相同值的行

时间:2017-01-20 01:55:16

标签: postgresql

我有一个名为raw_data的表,其中包含以下数据

enter image description here

您可以看到id 1和2在字段desakecamatankabupaten以及id 3,4,5中共享相同的值。 所以基本上我想选择所有未跟随相同先前值的行。预期结果将是:

enter image description here

我知道在PHP等任何编程语言中都很容易做到这一点,但我需要在postgresql中使用它。这可行吗?在此先感谢。

1 个答案:

答案 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;