Mysql 从时间和值的降序集合中,如何使用SQL查找最高值最后一次出现的时间

Mysql 从时间和值的降序集合中,如何使用SQL查找最高值最后一次出现的时间,mysql,sql,Mysql,Sql,我有一个涵盖很多天的每分钟温度数据的数据库,我想得到某一天达到的最高温度。我可以使用以下SQL查询来实现这一点(请注意,它遵循Met Office指南,该指南从09:00到21:00,而不是从00:00到23:59获取最大使用数据)。此外,添加今天的日期是为了进行说明: SELECT timestamp, shieldedTemp FROM stationData WHERE timestamp BETWEEN '2017-01-29 09:00:00' AND '20

我有一个涵盖很多天的每分钟温度数据的数据库,我想得到某一天达到的最高温度。我可以使用以下SQL查询来实现这一点(请注意,它遵循Met Office指南,该指南从09:00到21:00,而不是从00:00到23:59获取最大使用数据)。此外,添加今天的日期是为了进行说明:

      SELECT timestamp, shieldedTemp FROM stationData 
      WHERE timestamp BETWEEN '2017-01-29 09:00:00' AND '2017-01-29 21:00:00' 
      ORDER BY shieldedTemp DESC LIMIT 1
这只是对这两次之间的所有记录进行排序,然后返回最上面的记录。然而,通过查看图表,我意识到,有时温度会在达到最高温度后趋于稳定,并在开始下降之前在相同的最高温度下保持一段时间。在这种情况下,最大值将在第一次达到最大值时报告

我要做的是返回上次达到最大值的时间。这可以通过修改上面的查询来实现吗?或者我必须返回一整天的所有有序值,然后对它们进行迭代,以找到与第一个索引温度相同的最大索引?

尝试以下方法:

select timestamp, shieldedTemp
from stationData
where 
    timestamp between '2017-01-29 09:00:00' and '2017-01-29 21:00:00'
    and shieldedTemp = (
        select max(shieldedTemp)
        from stationData
        where timestamp between '2017-01-29 09:00:00' and '2017-01-29 21:00:00'
    )
order by timestamp desc
limit 1;
解释

子查询为您要查找的时间戳范围提取最高温度。外部查询获取相同时间戳范围内的所有记录,但仅获取max temp的记录


首先根据最高时间戳对结果集进行排序,并仅提取第一条记录。

只需将时间戳添加到排序语句中即可

SELECT timestamp, shieldedTemp 
FROM stationData 
WHERE timestamp BETWEEN '2017-01-29 09:00:00' AND '2017-01-29 21:00:00' 
ORDER BY shieldedTemp DESC, timestamp DESC
LIMIT 1

检查此处:

如果此最大值涵盖一天以上,会发生什么情况?@McNets不会,因为当前查询在同一天的两次之间获得最大值。我相信下面有两个答案。为什么你不在
时间戳
上添加排序顺序,就像你在原始查询中对
shieldetemp
所做的那样?@JasonKrs不知道为什么,但我实际上没有想到!谢谢,请密切关注答案的质量。