用于删除类似行的SQL查询

时间:2018-01-03 03:01:15

标签: sql postgresql

我遇到以下情况的麻烦:

  1. 重复除了id(主键)
  2. 除id(主键)和finish_time
  3. 外,所有字段都相同

    enter image description here

    我的问题是如何从第1个结果中删除一行,但也删除了finish_time字段中具有空值的行。最终预期结果如下: enter image description here

    提前非常感谢你!

2 个答案:

答案 0 :(得分:2)

您可以使用distinct on保留一行:

select distinct on (task_id, date) t.*
from t
order by task_id, date, finish_time nulls last;

答案 1 :(得分:1)

像这样

    delete from t
    where id IN
    (select distinct on (task_id, date) t.id
    from t
    order by task_id, date, finish_time nulls last) as sub