在给定的时间范围内,在mysql中选择最高和最低温度

时间:2019-06-09 18:50:09

标签: mysql

已经很长时间没有在mysql中进行编码了,我陷入了一个小问题。尝试搜索,但找不到任何有效的方法。 我有一个带有temp_id,日期和温度的表。我想显示一个时间范围内(过去24小时,上周)的最高温度。 像这样的东西

select 
    date,
    format(max(temp_c),2) as highest_temp
from temps 
where date between '2019-06-01 00:00:00' and '2019-06-07 23:59:59'
and temp_id = 'fineoffset-temperature-152'; 

这显示了错误的日期并且具有固定的日期间隔,但这是我需要您帮助的地方。显示最低温度的方法相同,但查询应使用相同的execpt min(temp_c)。

谢谢!

2 个答案:

答案 0 :(得分:0)

要获取绑定日期,您可以将内部联接与子查询一起使用以获取最大温度

select date,  format(max(temp_c),2) as highest_temp
from temps 
INNER JOIN (
  select max(temp_c) highest_temp
  from temps 
  where date between '2019-06-01 00:00:00' and '2019-06-07 23:59:59'
    and temp_id = 'fineoffset-temperature-152'; 
) t on t.highest_temp = temps.temp_c 
where date between '2019-06-01 00:00:00' and '2019-06-07 23:59:59'
  and temp_id = 'fineoffset-temperature-152'

答案 1 :(得分:0)

由于结果只需要一行,因此只需将ORDER BYLIMIT 1一起使用。

select date, format(temp_c, 2) as highest_temp
from temps 
where date <= now()
  and date >= now() - interval 24 hour
  and temp_id = 'fineoffset-temperature-152'
order by temp_c desc
limit 1

这将返回最近24小时内温度最高的行。如果您从上周开始需要它,可以使用

and date >= now() - interval 24*7 hour

and date >= now() - interval 7 day

and date >= now() - interval 1 week

请注意,如果将两行绑定在一起(具有相同的温度),MySQL可能会“随机”选择其中的一行。如果希望结果一致且独立于所使用的索引,则应扩展ORDER BY子句。在您的情况下,您可以说“平时选择最近的一行”-

order by temp_c desc, date desc