Amazon Redshift:获取最新行查询

unt*_*led 5 amazon-redshift

可售:

saleID | date | orderstatus | .....
Run Code Online (Sandbox Code Playgroud)

我只想获取每个 saleID 的最新详细信息。我可以使用嵌套查询来做到这一点,例如

Select * from saletable t1 where date in ( select max(date) from saletable t2 where t1.saleID = t2.saleID ) 
Run Code Online (Sandbox Code Playgroud)

是否可以通过简单的查询来完成?如果是这样,有什么提示吗?

Pat*_*ick 6

您可以使用公用表表达式来有效地完成此操作:

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;
Run Code Online (Sandbox Code Playgroud)

正如 DogBoneBlues 所评论的:这比原始方法有优势,因为只有 2 次数据扫描(一次是聚合,另一次是过滤,像 Redshift 这样的列式数据库将非常有效地完成这两项操作)。使用原始方法,将对每行数据重新发出查询,从而导致 O(n 2 ) 操作。