我有一个CHANGES表,其中有VALUE(integer)和CREATED_AT(timestamp)字段。我想知道按过去30天的每个日期分组的VALUE列的总数(未进行30次查询)。日期范围内的SQL计数总数
因此,如果昨天有记录用10,-7和12的VALUE创建;我想要一个记录返回与CREATED_AT =昨天和TOTAL = 15.
任何帮助吗?
我有一个CHANGES表,其中有VALUE(integer)和CREATED_AT(timestamp)字段。我想知道按过去30天的每个日期分组的VALUE列的总数(未进行30次查询)。日期范围内的SQL计数总数
因此,如果昨天有记录用10,-7和12的VALUE创建;我想要一个记录返回与CREATED_AT =昨天和TOTAL = 15.
任何帮助吗?
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);
那么,它稍微取决于时间戳的格式(SQL/Unix/etc)。但是,这种类型的查询可能会帮助您一起:
这是一个好的开始 - 它计算每天的行数。如果您使用SUM(VALUE)而不是COUNT(VALUE),则会添加它们。如果您使用'%Y-%m',它将按月分组。按30天的时间分组,您需要做一些日期数学TRUNCATE(DAYS(TODAY - CREATED_AT)/ 30)。不幸的是,TRUNCATE,DAYS和TODAY可能不是数据库的实际名称。 – karmakaze 2011-06-02 02:15:11
噢,对不起...忘了他想每30天分组一次。如果可以每月对它们进行分组,则他可以将查询更改为:DATE_FORMAT(CREATED_AT, '%Y-%m')
。如果您想坚持30天,并在执行查询的那一天开始计算这30天,这将不起作用。并且@karmakaze;我不知道为什么你会提出SUM()函数,但我认为VALUE值只是一个随机ID。通过增加这些数据,它没有提及那个月/ 30天的生日庆祝的人数。 –
2011-06-02 02:28:46
我相信在过去的30天里我可以只添加“where created_at> [30天前]”。总和是我正在寻找的功能。 – tybro0103 2011-06-02 02:34:24
您标记3个不同的数据库系统,哪一个你真的使用? – piotrm 2011-06-02 02:03:20
mysql,但我希望不依赖于该查询。 – tybro0103 2011-06-02 02:04:59