2017-08-03 100 views
1

我有這樣的一個表:從每小時數據使用SQL GROUP每日數據BY

fld_id   fld_DateTime     fld_Index 
      2017-07-01 00:00:00.000    5 
      2017-07-01 01:00:00.000    10 
      2017-07-01 02:00:00.000    15 
      2017-07-01 03:00:00.000    40 
       ........... 
       ........... 
      2017-07-01 23:00:00.000    70 
      2017-07-02 00:00:00.000    110 
      2017-07-02 01:00:00.000    140 
      2017-07-02 02:00:00.000    190 
       ............... 
       ............... 
      2017-07-02 23:00:00.000    190 

我所試圖做的是將它們分組和計數,每天fld_index的總和,像這樣:

fld_id   fld_DateTime     SUM 
        2017-07-01      190 
        2017-07-02      400 

這是我已經試過:

SELECT fld_dateTime, SUM(fld_Index) AS Sum 
FROM tbl_data 
WHERE 
    AND fld_ConsDateTime BETWEEN '2017-07-01' AND '2017-08-02' 
GROUP BY fld_dateTime 

它計算總和,但仍然在每小時格式。如何實現上述例子的日常格式?

UPDATE月部分輸出

2017 8 30630800.0000 
2017 7 589076201.1800 
+0

我刪除了不兼容的數據庫類型。請僅使用您真正使用的數據庫進行標記。 –

回答

5

簡單地鑄造爲DATE

SELECT CAST(fld_dateTime AS DATE) AS fld_Date, SUM(fld_Index) AS Sum 
FROM tbl_data 
WHERE 
    fld_ConsDateTime BETWEEN '2017-07-01' AND '2017-08-02' 
GROUP BY CAST(fld_dateTime AS DATE); 

編輯:

什麼一個月?它是一樣的邏輯嗎?

這取決於你的RDBMS,但在SQL Server中,你可以使用:

SELECT YEAR(fld_dateTime), MONTH(fld_dateTime), SUM(fld_Index) AS Sum 
FROM tbl_data 
GROUP BY YEAR(fld_dateTime), MONTH(fld_dateTime); 

增加一年的一部分,以避免不同年份分組的記錄是非常重要的。

+1

我會在派生表中執行CAST部分,以完全符合ANSI SQL。 – jarlh

+1

月份呢?它是一樣的邏輯嗎? – FreshPro

+1

@FreshPro邏輯相同,使用函數在'SELECT'和'GROUP BY'部分中提取'YEAR'和'MONTH'部分。 – lad2025

3

您需要提取日期。在SQL Server中,你會怎麼做:

SELECT CAST(fld_dateTime as DATE) as fld_date, SUM(fld_Index) AS Sum 
FROM tbl_data 
WHERE fld_ConsDateTime >= '2017-07-01' AND 
     fld_ConsDateTime < '2017-08-03' 
GROUP BY CAST(fld_dateTime as DATE) 
ORDER BY fld_date 

在MySQL中,上述的工作,但我會做到:

SELECT DATE(fld_dateTime) as fld_date, SUM(fld_Index) AS Sum 
FROM tbl_data 
WHERE fld_ConsDateTime >= '2017-07-01' AND 
     fld_ConsDateTime < '2017-08-03' 
GROUP BY DATE(fld_dateTime) 
ORDER BY fld_date; 

在這兩種情況下,你應該改變WHERE條款。您的版本會在2017-08-02的日期/時間恰好是午夜的時候保留航班。使用>=<會更精確 - 在一天內完成所有日期/時間,而不是下一次。