我有一些表格,我将记录存储在
中transactions --- | id | type_id | value | created_at | |----|---------|-------|---------------------| | 1 | 3 | 10 | 2016-11-01 09:00:00 | | 2 | 3 | 15 | 2016-11-01 10:00:00 | | 3 | 3 | 10 | 2016-11-03 09:00:00 | types --- | id | name | |----|--------| | 3 | 'Type' |
我想得到的是自时间开始以来每天交易价值的总和(总和),没有记录显示为0的天数:
results --- | type | total | date | |------|-------|------------| | Type | 25 | 2016-11-01 | | Type | 0 | 2016-11-02 | | Type | 10 | 2016-11-03 |
当我只对具有值的结果感兴趣但查询没有返回没有记录的日期时,我可以很容易地做到这一点:
SELECT `types`.`name` as `type`, SUM(`transactions`.`value`) as `total`, DATE_FORMAT(`transactions`.`created_at`) as `date` FROM `transactions` JOIN `types` ON `transactions`.`type_id` = `types`.`id` GROUP BY `date`, `types`.`id`
不幸的是,我需要获取一个范围之间的所有日期并返回值,默认为零。范围可以根据用户选择的内容而变化。