Amazon Redshift:获取最新的行查询

Posted

技术标签:

【中文标题】Amazon Redshift:获取最新的行查询【英文标题】:Amazon Redshift : Fetch latest row query 【发布时间】:2015-01-30 11:18:18 【问题描述】:

可售:

saleID | date | orderstatus | .....

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

Select * from saletable t1 where date in ( select max(date) from saletable t2 where t1.saleID = t2.saleID ) 

是否可以通过简单的查询来做到这一点?如果有,有什么提示吗?

【问题讨论】:

【参考方案1】:

您可以使用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(n2) 操作。

【讨论】:

上述查询对我在问题中提到的子查询有任何意义吗?

以上是关于Amazon Redshift:获取最新的行查询的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Redshift 查询以在月底获取拖欠金额和逾期天数

复制命令 Amazon Redshift

Redshift 中的 DAU WAU MAU 错误:[Amazon](500310) 无效操作:由于内部错误,不支持此类关联子查询模式;

将 IntelliJ 连接到 Amazon Redshift

Amazon Redshift - 复制 - 数据加载与查询性能问题

Amazon Redshift - 按类别获取每周销售量