我有一张表,上面有下列数据
Temperature DateTimeValue WarnCrit
29.1 2020-06-22 10:08:30 0
29.2 2020-06-22 09:38:28 0
29.2 2020-06-22 09:08:26 0
28.9 2020-06-22 08:38:26 0
28.7 2020-06-22 08:08:24 0
28.7 2020-06-22 07:38:22 0
29.2 2020-06-22 07:08:21 0
29.8 2020-06-22 06:38:20 0
29.9 2020-06-22 06:08:18 0
我喜欢做一个选择,以找到在特定日期的最高,最低,平均温度,所以我使用以下:
SELECT max(Temperature) as maxtemp
, min(Temperature) as mintemp
, avg(Temperature) as avtemp
FROM TempHistory
WHERE date(DateTimeValue)='2020-06-22'
这项工作是正确的,但我也喜欢有这个温度发生的具体时间。所以我把它改成:
SELECT *
from TempHistory
where DateTimeValue = '2020-06-22'
and Temperature = (select max(Temperature) from TempHistory)
而这个什么也没回报。
2条答案
按热度按时间qhhrdooz1#
您可以使用窗口函数,尤其是
first_value()
:不幸的是,mysql(以及一般的sql)没有“first”或“last”聚合函数。然而,这是非常相似的。
还要注意
WHERE
. 这允许查询使用上的索引DateTimeValue
--如果有的话。7d7tgy0s2#
如果没有领带(或者你不在乎),你可以这样写:
理论基础:
你的日期有时间部分,所以你需要一个不平等的过滤器
使用返回最高温度日期的子查询比使用温度本身更简单(因此,不需要在外部查询中筛选日期)
如果你想要一天中温度最低的那排,你可以把它去掉
desc
从order by
条款。