GROUP BY从特定日期开始的X天的时间间隔

时间:2015-08-31 17:38:33

标签: mysql sql

我正在试图弄清楚是否可以按照特定日期开始的X天的时间间隔对数据进行分组。我知道如何按日,周,月等分组,但我在任意时间间隔都难以接受。

例如......给定一个包含timestampsession_count列的SQL表,我想生成一个按特定日期的时间间隔(在本例中为30天)分组的聚合(在这种情况下,今天)。

所以,如果今天是2015-08-31,并且我想回顾过去90天,那么我希望得到三个结果,每个结果涵盖30天:

+-------------------+---------------+
| start_of_interval | session_count |
+-------------------+---------------+
| 2015-08-01        |       1234567 |
| 2015-07-02        |       2345678 |
| 2015-06-02        |       3456789 |
+-------------------+---------------+

理想情况下,我希望能够指定一个任意天数作为间隔,以及一个可以回溯的任意日期。

修改

这是我希望使用的一般方法:

SELECT ROUND(CEILING(UNIX_TIMESTAMP(timestamp) / 2592000) * 2592000) AS thirtydays, 
SUM(session_count) AS session_count_sum
FROM my_table
GROUP BY thirtydays

但我不确定如何在查询的thirtydays部分指定我们应该从哪个开始工作的日期。

1 个答案:

答案 0 :(得分:0)

这会将其聚合为30天的块:

SELECT 

FLOOR(TIMESTAMPDIFF(
            DAY, timestamp, '2015-08-31 00:00:00'
) / 30) AS thirtydays, 

SUM(session_count)
FROM my_table
GROUP BY thirtydays;

然后返回它与间隔的开始日期:

SELECT DATE_SUB('2015-08-31 00:00:00', INTERVAL
    CEILING(
        TIMESTAMPDIFF(DAY, timestamp, '2015-08-31 00:00:00') / 30
    ) * 30
DAY) AS thirtydays, 

SUM(session_count)
FROM my_table
GROUP BY thirtydays;