ClickHouse按15分钟间隔分组统计报错,求正确SQL写法
按15分钟间隔统计事件数的ClickHouse正确实现方案
问题原因
你执行的SQL报错是因为ClickHouse不支持date_part函数,这是PostgreSQL等数据库的语法,需要替换为ClickHouse原生日期函数。
方案一:使用date_trunc直接指定15分钟间隔
ClickHouse的date_trunc函数支持直接传入间隔参数,一步到位截断到15分钟起始时间:
SELECT date_trunc('15 minute', timestamp) AS interval_start, COUNT(*) AS count FROM my_table GROUP BY interval_start ORDER BY interval_start
方案二:使用toStartOfInterval函数(推荐)
这是ClickHouse专门用于按固定间隔取起始时间的函数,语义更清晰:
SELECT toStartOfInterval(timestamp, INTERVAL 15 MINUTE) AS interval_start, COUNT(*) AS count FROM my_table GROUP BY interval_start ORDER BY interval_start
兼容原逻辑的手动计算方案
如果想保留你原本的计算逻辑,可将date_part替换为ClickHouse的toMinute函数:
SELECT date_trunc('hour', timestamp) + toIntervalMinute(floor(toMinute(timestamp)/15)*15) AS interval_start, COUNT(*) AS count FROM my_table GROUP BY interval_start ORDER BY interval_start
以上三种方案都能得到你期望的结果:
interval_start count 2023-01-25 05:00:00 5 2023-01-25 05:15:00 3
内容的提问来源于stack exchange,提问作者barney stinson 2
相关产品推荐
相关产品推荐

