select distinct on (my_unique_1, my_unique_2) * from my_table;
这为 distinct on 中的每个列组合选择一行 . 实际上,它始终是第一排 . 它很少在没有 order by 的情况下使用,因为没有可靠的顺序返回行(因此是第一个) .
结合 order by ,您可以选择第一行(这会留下具有最大last_update_date的行):
select distinct on (my_unique_1, my_unique_2) *
from my_table order by my_unique_1, my_unique_2, last_update_date desc;
现在您可以将其选择为新表:
create table my_new_table as
select distinct on (my_unique_1, my_unique_2) *
from my_table order by my_unique_1, my_unique_2, last_update_date desc;
或者您可以将其用于删除,假设 row_id 是主键:
delete from my_table where row_id not in (
select distinct on (my_unique_1, my_unique_2) row_id
from my_table order by my_unique_1, my_unique_2, last_update_date desc);
1 回答
您正在寻找的查询是:
这为
distinct on
中的每个列组合选择一行 . 实际上,它始终是第一排 . 它很少在没有order by
的情况下使用,因为没有可靠的顺序返回行(因此是第一个) .结合
order by
,您可以选择第一行(这会留下具有最大last_update_date的行):现在您可以将其选择为新表:
或者您可以将其用于删除,假设
row_id
是主键: