PHP,MySQL。最小值和最大值日,月和年

时间:2016-05-21 11:29:47

标签: php mysql datetime max min

编辑以澄清:

这是我的表:

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)

亲切的问候

1 个答案:

答案 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)作为列名。这使您很难对数据库进行麻烦。