红移:替代"row_number() partition by"后的第一行过滤,性能更好



在此示例中,我尝试从每个客户那里获取第一个订单的日期时间和产品名称。

我的查询如下所示:

select * from(
select customerid,
orderdatetime,
productname,
row_number() over (partition by customerid order by orderdatetime) rn
from t
) where rn=1

在表t中,customerid+orderdatetime可以用作主键,而productname是自由文本字符。客户数量庞大,每个客户下了大量订单。

我觉得在这个查询中,很多计算浪费在order by上,因为我只想要最早的(最小值(。真的有这样的浪费吗?有没有其他方法可以更快地获得结果?

我正在使用 Amazon Redshift。

您可以使用相关的子查询进行尝试,因为客户ID和orderdatetime是主键 所以它可能有助于获得更好的性能

select t.* from your_table t 
where orderdatetime = (select min(orderdatetime) from your_table t1
where t1.customerid=t.customerid
)

相关内容

  • 没有找到相关文章

最新更新