1

我有一个如下所示的 SQL 表:

日期 温度 露点 湿度
2015 年 10 月 12 日 5.1 2.4 57
2015 年 11 月 12 日 4.1 5.8 69
2015 年 12 月 12 日 20.6 3.6 56
2015 年 13 月 12 日 13.0 2.5 21
15 年 14 月 12 日 5.6 13.6 15
2015 年 15 月 12 日 5.1 2.4 56

我想知道是否可以仅使用一个 SQL 查询将其打印出来。也就是说,对于每个数据列,获取带有发生日期的最小值和最大值(例如,我想知道最小值 4.1 是 11/12/15,最大值是 20.6 是 12/12/15。)

是否可以使用一个 sql 查询来做到这一点?具体来说,我希望输出格式为:

日期数据名称数据值
2015 年 11 月 12 日最低温度 4.1
2015 年 12 月 12 日最高温度 20.6
14/12/15 湿度-分钟 15
11/12/15 最大湿度 69
4

3 回答 3

1

这正是你想要收到的,但它看起来很糟糕。

SELECT date, 'temp-min' dataName, temp dataValue
FROM numbers WHERE temp = (SELECT min(temp) FROM numbers)
UNION
SELECT date, 'temp-max' dataName, temp dataValue
FROM numbers WHERE temp = (SELECT max(temp) FROM numbers)
UNION
SELECT date, 'humidity-min' dataName, humidity dataValue
FROM numbers WHERE humidity = (SELECT min(humidity) FROM numbers)
UNION
SELECT date, 'humidity-max' dataName, humidity dataValue
FROM numbers WHERE humidity = (SELECT max(humidity) FROM numbers)
;
于 2015-01-16T22:14:47.000 回答
0

您可以使用单个查询轻松完成:

SELECT Date, max(temp), min(temp), max(dewpoint), min(dewpoint), etc...
FROM yourtable
GROUP BY Date

获得最小值/最大值的多列结果。但在 MySQL 中,很难将结果“还原”为单列/多行结果。这种转换最好在客户端代码中完成。

于 2015-01-16T21:30:46.610 回答
0

在 MySQL 中,最简单的方法可能是使用substring_index()/group_concat()技巧:

select substring_index(group_concat(date order by temp asc), ',', 1) as minTempDate,
       substring_index(group_concat(date order by temp desc), ',', 1) as maxTempDate,
       substring_index(group_concat(date order by dewpoint asc), ',', 1) as minDPDate,
       substring_index(group_concat(date order by dewpoint desc), ',', 1) as maxDPDate,
       substring_index(group_concat(date order by humidity asc), ',', 1) as minHumidityDate,
       substring_index(group_concat(date order by humidity desc), ',', 1) as maxHumidityDate
from table t;

另一种方法是union all像这样使用:

(select date, 'temp-min', temp from table t order by temp asc limit 1)
union all
(select date, 'temp-max', temp from table t order by temp desc limit 1)
union all
(select date, 'humidity-min', humidity from table t order by humidity asc limit 1)
union all
(select date, 'humidity-max', humidity from table t order by humidity desc limit 1)
于 2015-01-16T21:33:41.783 回答