2011-06-02 54 views
1

我有一個CHANGES表,其中有VALUE(integer)和CREATED_AT(timestamp)字段。我想知道按過去30天的每個日期分組的VALUE列的總數(未進行30次查詢)。日期範圍內的SQL計數總數

因此,如果昨天有記錄用10,-7和12的VALUE創建;我想要一個記錄返回與CREATED_AT =昨天和TOTAL = 15.

任何幫助嗎?

+0

您標記3個不同的數據庫系統,哪一個你真的使用? – piotrm 2011-06-02 02:03:20

+0

mysql,但我希望不依賴於該查詢。 – tybro0103 2011-06-02 02:04:59

回答

4
SELECT date(created_at) as CREATED_AT, sum(value) as TOTAL 
FROM changes 
WHERE created_at >= curdate() - interval 30 day 
GROUP BY date(created_at); 
+0

會按日期分組嗎? – tybro0103 2011-06-02 02:16:05

+0

是的,date()返回datetime/timestamp的日期部分。 – piotrm 2011-06-02 02:21:09

+2

使用常量CURRENT_DATE,這是SQL標準,可用於許多數據庫。函數curdate()僅用於MySQL。 – 2011-06-02 06:05:14

1

那麼,它稍微取決於時間戳的格式(SQL/Unix/etc)。但是,這種類型的查詢可能會幫助您一起:

​​
+0

這是一個好的開始 - 它計算每天的行數。如果您使用SUM(VALUE)而不是COUNT(VALUE),則會添加它們。如果您使用'%Y-%m',它將按月分組。按30天的時間分組,您需要做一些日期數學TRUNCATE(DAYS(TODAY - CREATED_AT)/ 30)。不幸的是,TRUNCATE,DAYS和TODAY可能不是數據庫的實際名稱。 – karmakaze 2011-06-02 02:15:11

+0

噢,對不起...忘了他想每30天分組一次。如果可以每月對它們進行分組,則他可以將查詢更改爲:DATE_FORMAT(CREATED_AT, '%Y-%m')。如果您想堅持30天,並在執行查詢的那一天開始計算這30天,這將不起作用。並且@karmakaze;我不知道爲什麼你會提出SUM()函數,但我認爲VALUE值只是一個隨機ID。通過增加這些數據,它沒有提及那個月/ 30天的生日慶祝的人數。 – 2011-06-02 02:28:46

+0

我相信在過去的30天裏我可以只添加「where created_at> [30天前]」。總和是我正在尋找的功能。 – tybro0103 2011-06-02 02:34:24