已经很长时间没有在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)。
谢谢!
答案 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 BY
与LIMIT 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