saletable:
saleID | date | orderstatus | .....
我想只获取每个saleID的最新详细信息。我可以使用像
这样的嵌套查询来实现Select * from saletable t1 where date in ( select max(date) from saletable t2 where t1.saleID = t2.saleID )
是否可以通过简单的查询来完成?如果有,任何提示?
答案 0 :(得分:3)
您可以使用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评论的那样:这比原始方法有优势,因为只有2次数据扫描(一次是聚合而另一次是过滤,两者都像Redshift这样的柱状数据库非常有效)。使用原始方法,将为每行数据重新发出查询,从而产生O(n 2 )操作。