如何在SQL中基于符合条件的最新记录创建统计视图
实现方案
这个需求属于典型的行转列聚合场景,优先推荐兼容性更强的条件聚合写法,几乎支持所有主流SQL dialect(MySQL、PostgreSQL、Oracle、SQL Server等均可用)。
方法1:条件聚合(通用兼容版)
-- 创建目标视图,注意将下方 your_table_name 替换为你的实际表名 CREATE VIEW case_latest_operate_time AS SELECT caseNo, MAX(CASE WHEN teamName = 'A' THEN timestamp END) AS `TeamA (Latest Time)`, MAX(CASE WHEN teamName = 'B' THEN timestamp END) AS `Team B(Latest Time)` FROM your_table_name GROUP BY caseNo ORDER BY caseNo;
逻辑说明
- 先按
caseNo分组,把同一个案件的所有操作归到同一组 - 用
CASE WHEN按团队筛选时间,不符合团队条件的记录会返回NULL - 利用
MAX聚合函数忽略NULL的特性,取到每个团队对当前案件的最大(也就是最新)操作时间
方法2:PIVOT语法(适配支持行转列语法的数据库)
如果你的数据库支持PIVOT语法(比如Oracle、SQL Server、PostgreSQL 11+、MySQL 8.0+),也可以用以下写法:
CREATE VIEW case_latest_operate_time AS SELECT caseNo, A AS `TeamA (Latest Time)`, B AS `Team B(Latest Time)` FROM your_table_name PIVOT ( MAX(timestamp) FOR teamName IN ('A' AS A, 'B' AS B) ) AS pivot_result ORDER BY caseNo;
内容的提问来源于stack exchange,提问作者anurag
相关产品推荐
相关产品推荐

