编辑以澄清:
这是我的表:
ID Datetime Date Temp
6043 2016-05-24 10:20:00 2016-05-24 19.3
6042 2016-05-24 10:15:00 2016-05-24 19.1
6041 2016-05-24 10:10:00 2016-05-24 19.1
6040 2016-05-24 10:05:00 2016-05-24 19.1
我尝试做的是选择具有最高" Temp"的行。
这是我的疑问:
SELECT max(temp) as maxtemp FROM weatherdata WHERE day(date) = 24
查询只给我maxtemp,我怎样才能获得ID和日期时间?
目标是获取表格中每天的最大值(WHERE day(date)= xx)
亲切的问候
答案 0 :(得分:0)
在我看来,你正试图让整个weatherdata
观察行观察到任何一个月内含有最高温度的观察。
如您所知,这需要两个步骤。第一步:在每个月找到最高温度观察。你是这样做的:
SELECT MAX(temp) temp, LAST_DAY(`datetime`) month_ending
FROM weatherdata
GROUP BY LAST_DAY(`datetime`)
这里的诀窍是使用LAST_DAY()
来确定每个观察发生在哪个月。它需要任何日期,日期时间或时间戳项,并计算出其当月最后一天的日期。此查询为您提供包含每月一个临时值的结果集,用于该月中的最高温度。试试吧。确保它适合你。
接下来,您应该将其加入详细的观察表,如下所示:
SELECT w.*
FROM weatherdata w
JOIN (
SELECT MAX(temp) temp, LAST_DAY(`datetime`) month_ending
FROM weatherdata
GROUP BY LAST_DAY(`datetime`)
) m ON w.temp = m.temp
AND LAST_DAY(w.`datetime`) = m.month_ending
ORDER BY w.`datetime`
这将为您提供详细的观察。请注意,如果在任何给定月份中多次观察发生最高温度,您将全部获得它们。
最后,如果您只需要几个月,请将此WHERE子句放在ORDER BY子句
之前 WHERE `datetime` >= '2016-04-01
AND `datetime` < '2016-05-01 -- to get April 2016
专业提示:不要使用数据类型的名称(如datetime
)作为列名。这使您很难对数据库进行麻烦。