Mysql 日期范围内的SQL计数总计

Mysql 日期范围内的SQL计数总计,mysql,sql,sqlite,postgresql,Mysql,Sql,Sqlite,Postgresql,我有一个带有字段值(integer)和创建时间(timestamp)的CHANGES表。我想知道过去30天中,按每个天数分组的值列的总数(不进行30次查询) 因此,如果昨天创建了值为10、-7和12的记录;我希望返回一条记录,其中CREATED_AT=昨天,TOTAL=15 有什么帮助吗?嗯,这取决于时间戳的格式(SQL/Unix/etc)。但这种类型的查询可能会帮助您: SELECT DATE_FORMAT(CREATED_AT, '%Y-%m-%d') ym, COUNT(VAL

我有一个带有字段值(integer)和创建时间(timestamp)的CHANGES表。我想知道过去30天中,按每个天数分组的值列的总数(不进行30次查询)

因此,如果昨天创建了值为10、-7和12的记录;我希望返回一条记录,其中CREATED_AT=昨天,TOTAL=15


有什么帮助吗?

嗯,这取决于时间戳的格式(SQL/Unix/etc)。但这种类型的查询可能会帮助您:

SELECT
   DATE_FORMAT(CREATED_AT, '%Y-%m-%d') ym,
   COUNT(VALUE)
FROM foo
GROUP BY ym

嗯,这稍微取决于时间戳的格式(SQL/Unix/etc)。但这种类型的查询可能会帮助您:

SELECT
   DATE_FORMAT(CREATED_AT, '%Y-%m-%d') ym,
   COUNT(VALUE)
FROM foo
GROUP BY ym

您标记了3个不同的数据库系统,您真正使用的是哪一个?mysql,但我希望查询不依赖于此。您标记了3个不同的数据库系统,您真正使用的是哪一个?mysql,但我希望查询不依赖于此。这是一个好的开始--它计算每天的行数。如果使用SUM(VALUE)而不是COUNT(VALUE),则会将它们相加。如果使用“%Y-%m”,它将按月分组。要按30天的周期分组,您需要做一些日期数学截断(DAYS(DAYS-CREATED_AT)/30)。很遗憾,截断、天和今天可能不是您数据库的实际名称。噢,对不起……忘记了他想每30天对它们进行分组。如果可以每月对它们进行分组,他只需将查询更改为:
DATE\u格式(创建于,'%Y-%m')
。如果您希望坚持30天,并在执行查询的当天开始计算这30天,那么这将不起作用。还有,@karmakaze;我不知道您为什么建议使用SUM()函数,但我假设该值只是一个随机id。通过将这些值相加,它并不能说明当月/30天庆祝生日的人数。我相信在过去30天的部分中,我可以添加“where created_at>[30天前]”。Sum是我正在寻找的函数。Sum的用法:问题中的示例的值为10、-7和12,在结果中应显示为15。这是一个好的开始——它计算每天的行数。如果使用SUM(VALUE)而不是COUNT(VALUE),则会将它们相加。如果使用“%Y-%m”,它将按月分组。要按30天的周期分组,您需要做一些日期数学截断(DAYS(DAYS-CREATED_AT)/30)。很遗憾,截断、天和今天可能不是您数据库的实际名称。噢,对不起……忘记了他想每30天对它们进行分组。如果可以每月对它们进行分组,他只需将查询更改为:
DATE\u格式(创建于,'%Y-%m')
。如果您希望坚持30天,并在执行查询的当天开始计算这30天,那么这将不起作用。还有,@karmakaze;我不知道您为什么建议使用SUM()函数,但我假设该值只是一个随机id。通过将这些值相加,它并不能说明当月/30天庆祝生日的人数。我相信在过去30天的部分中,我可以添加“where created_at>[30天前]”。Sum是我正在寻找的函数。Sum的用法:问题中的示例的值为10、-7和12,在结果中应显示为15。是否“按日期分组”按天分组?是的,date()返回日期时间/时间戳的天部分。使用恒定的当前_日期,这是SQL标准,在许多数据库中都适用。函数curdate()仅适用于MySQL。@piotrm-而不是curdate(),我们如何使用date range来获取每月、每周和每日计数?是否“按日期分组”按天分组?是的,date()返回日期时间/时间戳的天部分。使用恒定的当前日期,这是SQL标准,适用于许多数据库。函数curdate()仅适用于MySQL。@piotrm-如何使用date range来获取每月、每周和每日计数?