在此示例中,我尝试从每个客户那里获取第一个订单的日期时间和产品名称。
我的查询如下所示:
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
)