如何编写最优单查询,按ID分组获取各列非空时的最新timestamp
按ID分组获取各列非空时的最新时间戳最优SQL实现
直接用条件聚合就能实现单SQL最优查询,不需要拆成多个查询再union,这种方法只需要扫描一次表,性能比union方案更优。
针对你的表结构,SQL写法如下:
SELECT id, MAX(CASE WHEN col1 IS NOT NULL THEN timestamp END) AS latest_col1_ts, MAX(CASE WHEN col2 IS NOT NULL THEN timestamp END) AS latest_col2_ts FROM your_table GROUP BY id;
逻辑说明
- 用
CASE语句过滤出对应列非空的行,仅保留这些行的timestamp - 对每个
id分组后,用MAX()取过滤后的最大时间戳,就是该列非空时的最新时间 - 对比union方案:不需要多次查询表再合并结果,减少了IO开销,数据量越大优势越明显
用你的示例数据测试,查询结果会是:
| id | latest_col1_ts | latest_col2_ts |
|---|---|---|
| A | T1 | T4 |
| B | T3 | T2 |
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

