簡體   English   中英

PHP,MySQL。 最低和最高價值的日,月和年

[英]PHP, MySQL. Min and max value day, month and year

編輯以澄清:

這是我的桌子:

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

我想做的是選擇具有最高“溫度”的行。

這是我的查詢:

SELECT max(temp) as maxtemp FROM weatherdata WHERE day(date) = 24

該查詢僅給我最大溫度,如何獲取ID和日期時間?

目標是獲取表格中每一天的最大值(WHERE day(date)= xx)

親切的問候

在我看來,您正在嘗試獲取包含任何給定月份最高溫度的觀測的整個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 )用作列名。 這使得很難對數據庫進行故障排除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM