在Databricks编写SQL查询:获取(A,B)对最近3条时间戳的C列最大值
Databricks SQL 查询:分组取最近3条记录中C列的最大值
可以通过窗口函数+分组聚合实现需求,以下是具体的SQL语句:
WITH ranked_records AS ( SELECT A, B, C, -- 按(A,B)分组,时间戳倒序排名,最近的记录排第1 ROW_NUMBER() OVER (PARTITION BY A, B ORDER BY timestamp_col DESC) AS record_rank FROM your_table -- 替换为你的实际表名 ) SELECT A, B, MAX(C) AS max_recent_c FROM ranked_records -- 筛选每组最近的3条记录 WHERE record_rank <= 3 GROUP BY A, B;
逻辑说明:
- 窗口函数排名:用
ROW_NUMBER()给每个(A,B)分组内的记录按时间戳降序编号,最近的记录排名为1,次近为2,以此类推。 - 筛选最近3条:通过
WHERE record_rank <=3保留每组的前3条最新记录。 - 聚合求最大值:对筛选后的记录按
(A,B)分组,取C列的最大值。由于C是布尔类型,只要最近3条里存在True,结果就会是True,完全匹配你给出的示例场景。
示例验证:
对于A='1'、B='GG'的分组,时间戳从新到旧的记录为:
- 12:16 → False(rank=1)
- 12:15 → True(rank=2)
- 12:14 → False(rank=3)
- 12:12 → False(rank=4,被过滤)
筛选出前3条后,MAX(C)计算结果为True,符合预期。
内容的提问来源于stack exchange,提问作者Akshat Suwalka
相关产品推荐
相关产品推荐

