在此示例中,我尝试从每个客户那里获取第一个订单的日期时间和产品名称。
我的查询如下:
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。
答案 0 :(得分:0)
您可以通过使用相关的子查询来尝试,因为客户id和orderdatetime是主键 因此可能有助于获得更好的性能
select t.* from your_table t
where orderdatetime = (select min(orderdatetime) from your_table t1
where t1.customerid=t.customerid
)