Redshift:替代“ row_number()划分依据”之后的第一行,具有更好的性能

时间:2018-10-24 10:25:59

标签: sql amazon-redshift row-number

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

我的查询如下:

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。

1 个答案:

答案 0 :(得分:0)

您可以通过使用相关的子查询来尝试,因为客户id和orderdatetime是主键  因此可能有助于获得更好的性能

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