我目前的重复删除方法真的很蠢。
select col1, col2 ... col500 from
(select col1, col2 ... col500, ROW_NUMBER() OVER(PARTITION BY uid) as row_num)
where row_num=1;
如果没有子查询,有没有办法做到这一点?选择distinct不是一个选项,因为列中的小变化对于此输出不重要。
答案 0 :(得分:1)
在Postgres中distinct on ()
通常比使用窗口函数的等效解决方案更快,并且也不需要子查询:
select distinct on (uuid) *
from the_table
order by something
你有提供订单(这也是你应该对row_number()
做的事情)以获得稳定的结果 - 否则所选行是"随机&# 34 ;.
Postgres的情况如下。你还用amazon-redshift
标记了你的问题 - 我不知道Redshift(实际上是一个非常不同的DBMS)是否支持同样的事情,也不知道它是否有效。