获取MySQL表指定列最大值及对应日期的SQL查询需求
SQL查询:提取指定列的最大值及对应日期
需要从数据表tabela中,针对coluna1、coluna2、coluna4、coluna5这几列,分别找出每列的最大值,同时返回该最大值对应的日期。
原始数据表 tabela
| date | coluna1 | coluna2 | coluna3 | coluna4 | coluna5 |
|---|---|---|---|---|---|
| 2023-04-01 | 1 | 2 | 88 | 9 | 5 |
| 2023-03-02 | 20 | 11 | 85 | 1 | 55 |
| 2023-05-14 | 12 | 31 | 8 | 2 | 12 |
| 2023-01-04 | 14 | 54 | 4 | 45 | 46 |
| 2023-03-15 | 5 | 45 | 55 | 3 | 75 |
期望查询结果
| 列名 | 对应日期 | 最大值 |
|---|---|---|
| coluna1 | 2023-03-02 | 20 |
| coluna2 | 2023-01-04 | 54 |
| coluna4 | 2023-01-04 | 45 |
| coluna5 | 2023-03-15 | 75 |
解决方案SQL
可以通过UNION ALL将各列的查询结果合并,实现列转行并提取最大值及对应日期:
SELECT 'coluna1' AS 列名, date AS 对应日期, coluna1 AS 最大值 FROM tabela WHERE coluna1 = (SELECT MAX(coluna1) FROM tabela) UNION ALL SELECT 'coluna2' AS 列名, date AS 对应日期, coluna2 AS 最大值 FROM tabela WHERE coluna2 = (SELECT MAX(coluna2) FROM tabela) UNION ALL SELECT 'coluna4' AS 列名, date AS 对应日期, coluna4 AS 最大值 FROM tabela WHERE coluna4 = (SELECT MAX(coluna4) FROM tabela) UNION ALL SELECT 'coluna5' AS 列名, date AS 对应日期, coluna5 AS 最大值 FROM tabela WHERE coluna5 = (SELECT MAX(coluna5) FROM tabela);
补充说明
- 每个
SELECT分支单独处理一列:通过子查询获取目标列的最大值,再筛选出对应行的日期和数值,手动指定列名标识 - 用
UNION ALL合并四个分支的结果,正好匹配期望的输出格式 - 如果某列存在多个相同的最大值,该查询会返回所有对应的日期行;若只需一条结果,可根据数据库方言给每个
SELECT添加限制(如MySQL用LIMIT 1,SQL Server用TOP 1)
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

