如何从按小时统计的PV数据表中查询得到每日PV汇总数据
解决方案
直接对时间字段做日期截断后分组聚合即可,仅需一次查询即可得到全量每日PV统计结果,效率远高于逐天单独查询。
不同数据库的实现语句
MySQL
SELECT DATE(start_time) AS `date`, SUM(pv) AS pv FROM 你的表名 -- 可选:加时间范围过滤条件,比如只查9月数据 -- WHERE start_time >= '2021-09-01 00:00:00' AND start_time < '2021-10-01 00:00:00' GROUP BY DATE(start_time) ORDER BY `date`;
PostgreSQL
SELECT DATE_TRUNC('day', start_time)::DATE AS date, SUM(pv) AS pv FROM 你的表名 GROUP BY DATE_TRUNC('day', start_time)::DATE ORDER BY date;
SQL Server
SELECT CAST(start_time AS DATE) AS date, SUM(pv) AS pv FROM 你的表名 GROUP BY CAST(start_time AS DATE) ORDER BY date;
优化说明
- 你的表中每小时统计的时间区间都是整点且不跨天,直接取
start_time的日期部分做分组是完全准确的 - 如果
start_time字段建有索引,该查询仅需要一次范围扫描即可得到所有结果,无需多次单独查询,性能提升非常明显 - 如果需要筛选统计的时间范围,只需要在WHERE子句中加对应的时间条件即可,无需修改分组逻辑
内容的提问来源于stack exchange,提问作者vego
相关产品推荐
相关产品推荐

