首页 文章

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

提问于
浏览
0

我试图弄清楚是否可以按照特定日期开始的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

    这会将其聚合为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;
    

相关问题