可销售:
saleID | date | orderstatus | .....
我只想获取每个saleID的最新细节。我可以使用嵌套查询
Select * from saletable t1 where date in ( select max(date) from saletable t2 where t1.saleID = t2.saleID )
用一个简单的查询就可以做到吗?如果是,有什么提示吗?
最佳答案
您可以使用common table expression来有效地执行此操作:
WITH ld AS (
SELECT saleID, max("date") AS latest FROM saletable GROUP BY saleID)
SELECT s.*
FROM saletable s
JOIN ld ON ld.saleID = s.saleID
WHERE s."date" = ld.latest;
正如DogBoneBlues所评论的:与原始方法相比,这种方法具有优势,因为只有两次数据扫描(一次是聚合的,另一次是过滤的,这两次都是类似于柱状DB的Redshift非常有效)。使用原始方法,将为每一行数据重新发出查询,从而产生O(n2)操作。
关于postgresql - Amazon Redshift:获取最新行查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28234760/