几种报表SQL常用的时间分组写法
写了小一个月报表相关的SQL,把最容易忘的记下来
最近在公司的任务多数是写各种报表,SQL最长的格式化完了有30行,各种 JOIN 和 UNION ALL 拼 N 张表里的数据。其中最常用到的就是按照时间分组。
假设有如下表
员工名(VARCHAR) | 交易金额(INT) | 时间(DATETIME) |
---|---|---|
张三 | 66 | 2017-06-23 19:34:00 |
张三 | 166 | 2017-06-23 19:36:00 |
张三 | 566 | 2017-06-23 20:34:00 |
张三 | 934 | 2017-06-24 21:34:00 |
李四 | 661 | 2017-07-01 10:36:00 |
李四 | 83 | 2017-06-25 19:34:00 |
李四 | 23 | 2017-06-26 19:34:00 |
如果想查某个时间段里每个人的总交易金额报表,大概的 SQL 写完应该是这样的
SELECT `staff_name`,SUM(`money`),(DATE_FORMAT(`time`, '%Y-%m-%d')) AS date_char
FROM table_name
WHERE `time` >= "开始时间" AND `time` <= "结束时间"
GROUP BY staff_name,date_char
其中最重要的部分就是 date_char ,它决定了时间分组的粒度。