我正在试图弄清楚是否可以按照特定日期开始的X天的时间间隔对数据进行分组。我知道如何按日,周,月等分组,但我在任意时间间隔都难以接受。
例如......给定一个包含timestamp
和session_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
部分指定我们应该从哪个开始工作的日期。
答案 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;