可售:
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)
是否可以通过简单的查询来完成?如果是这样,有什么提示吗?
您可以使用公用表表达式来有效地完成此操作:
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 ) 操作。
| 归档时间: |
|
| 查看次数: |
9828 次 |
| 最近记录: |