Amazon Redshift:获取最新的行查询

时间:2015-01-30 11:18:18

标签: postgresql amazon-redshift

saletable:

saleID | date | orderstatus | .....

我想只获取每个saleID的最新详细信息。我可以使用像

这样的嵌套查询来实现
Select * from saletable t1 where date in ( select max(date) from saletable t2 where t1.saleID = t2.saleID ) 

是否可以通过简单的查询来完成?如果有,任何提示?

1 个答案:

答案 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 )操作。