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 查询以在月底获取拖欠金额和逾期天数
Redshift 中的 DAU WAU MAU 错误:[Amazon](500310) 无效操作:由于内部错误,不支持此类关联子查询模式;
将 IntelliJ 连接到 Amazon Redshift