2012-10-05 170 views
2

我試圖在上面和其他論壇中找到上述答案。MySQL獲取最小/最大值以及按小時,天,月等分組的相應日期/時間字段

給定一個表valuetable

  • ID:somevalues:DATE_TIME
  • 1:50:2012年10月5日十三點00分00秒
  • 2:45:2012年10月5日13: 15:00
  • 3:35:2012年10月5日13時20分○○秒
  • 4:20:2012年10月5日15:00:00
  • 5:45:2012年10月5日15 :25:00
  • 6:35:2012-10-05 15:35:00

等等,您如何查找最小值和最大值以及按小時,天,月等分組的相應日期和時間。

這裏的問題是,SQL組中的GROUP只有小時和IN MYSQL,會返回發生在集合或表中的第一個日期時間。我瞭解其他RDBMS的實現方式不同。因此,我使用ORDER BY來首先對錶進行排序,以便當我們運行查詢時,這些值按照最小和最大查詢的升序和降序排序,這樣當我們每小時選擇最小值和最大值時,第一個日期 - 查詢選擇的時間是與最小值或最大值相關的時間。

摳每下面給出的小時最低和最高的查詢,

SELECT 
     * 
FROM(
    SELECT 
     HOUR(DATE_TIME) AS MINHOUR, 
     MIN(SOMEVALUES) AS MINVALUES, 
     DATE_TIME AS MINDATETIME FROM (SELECT * FROM VALUETABLE 
    WHERE DATE_TIME>'2012-10-05 00:00:00' 
    AND DATE_TIME<'2012-10-05 23:59:59' 
    ORDER BY SOMEVALUES 
    ) AS TEMPT1 
    GROUP BY HOUR(DATE_TIME) 
    ) AS MINVALTABLE 
LEFT JOIN (
    SELECT 
     HOUR(DATE_TIME) AS MAXHOUR, 
     MAX(SOMEVALUES) AS MAXVALUES, 
     DATE_TIME AS MAXDATETIME FROM 
     (
      SELECT 
       * 
      FROM VALUETABLE 
      WHERE DATE_TIME>'2012-10-05 00:00:00' 
      AND DATE_TIME<'2012-10-05 23:59:59' 
      ORDER BY SOMEVALUES DESC 
     ) AS TEMPT2 
GROUP BY HOUR(DATE_TIME)) AS MAXVALTABLE 
ON MINVALTABLE.MINHOUR=MAXVALTABLE.MAXHOUR; 

查詢應輸出這裏,

  • MINHOUR | MINVALUES | MINDATETIME | MAXHOUR | MAXVALUES | MAXDATETIME
  • 13 | 35 | 2012-10-05 13:20:00 | 13 | 50 | 2012-10-05 13:00:00
  • 15 | 20 | 2012-10-05 15:00:00 | 15 | 45 | 2012-10-05 15:25:00

請讓我知道是否我錯過了任何東西,或者如果有更好的方法做到這一點。

據我瞭解,查詢同樣可以白天使用組,一個月等

回答

0

嘗試此查詢最大

SELECT 
    t.id, 
    DATE_FORMAT(lt.datetime, '%H') as Hour, 
    DATE_FORMAT(lt.datetime, '%d') as Day, 
    DATE_FORMAT(lt.datetime, '%m') as Month 
FROM table as t 
LEFT JOIN (SELECT MAX(id),datetime FROM table) as lt ON lt.id = t.id 
GROUP BY Month , Day , Hour 

如果這不是你想要的,請clearify你的問題

相關問題