如何无需临时表、嵌套子查询合并两个SQL聚合查询?
合并两个聚合查询的解决方案
可以通过条件聚合实现,无需临时表或嵌套子查询,一次分组即可完成两个查询的计算逻辑:
SELECT Value, MAX(CASE WHEN Value IN ('A', 'X') THEN CreateDT END) AS CreateDT, MAX(CASE WHEN Value IN ('C', 'Y') THEN UpdateDT END) AS UpdateDT FROM SampleTbl WHERE Value IN ('A', 'X', 'C', 'Y') -- 过滤目标Value,减少不必要计算 GROUP BY Value
逻辑说明:
- 利用
CASE语句限定仅对指定Value集合计算对应字段的最大值,不符合条件的行返回NULL,而MAX函数会自动忽略NULL值 - 外层
WHERE子句提前过滤出需要处理的Value,提升查询效率 - 分组后每个Value会同时得到对应的
CreateDT和UpdateDT最大值,与期望结果完全匹配
执行后得到的结果:
| Value | CreateDT | UpdateDT |
|---|---|---|
| A | 1/20/2023 | 1/26/2023 |
| C | 2/20/2023 | 2/23/2023 |
内容的提问来源于stack exchange,提问作者Losbear
相关产品推荐
相关产品推荐

