如何在没有子查询的情况下使用ROW_NUMBER为每个用户ID选择仅1条记录?

时间:2017-10-11 15:49:47

标签: postgresql amazon-redshift

我目前的重复删除方法真的很蠢。

select col1, col2 ... col500 from 
(select col1, col2 ... col500, ROW_NUMBER() OVER(PARTITION BY uid) as row_num)
where row_num=1;

如果没有子查询,有没有办法做到这一点?选择distinct不是一个选项,因为列中的小变化对于此输出不重要。

1 个答案:

答案 0 :(得分:1)

在Postgres中distinct on ()通常比使用窗口函数的等效解决方案更快,并且也不需要子查询:

select distinct on (uuid) *
from the_table
order by something

提供订单(这也是你应该对row_number()做的事情)以获得稳定的结果 - 否则所选行是"随机&# 34 ;.

Postgres的情况如下。你还用amazon-redshift标记了你的问题 - 我不知道Redshift(实际上是一个非常不同的DBMS)是否支持同样的事情,也不知道它是否有效。