【发布时间】:2020-02-13 21:24:27
【问题描述】:
我无法从整个月中获取每一天的总和, 我已经可以得到整个月的总和,但是如果我得到每天的总和,我总是得到错误的结果,行是重复的,这很奇怪,因为当我把它全部加起来时,我得到了正确的答案,如果我得到每天的总和是错误的。
这是我的桌子。
history table
|ID | from_range | to_range | price | main_id(fk)
1 2019-09-01 00:00:00 2019-09-15 00:00:00 5 1
2 2019-09-16 00:00:00 0000-00-00 00:00:00 10 1
current_usage table
id main_id(fk) total_usage date_created
1 1 10 2019-09-01
2 1 10 2019-09-01
3 1 10 2019-09-02
4 1 10 2019-09-02
5 1 10 2019-09-05
6 1 10 2019-09-05
7 1 10 2019-09-06
8 1 10 2019-09-06
9 1 10 2019-09-07
10 1 10 2019-09-07
11 1 10 2019-09-15
12 1 5 2019-09-16
13 1 5 2019-09-17
14 1 5 2019-09-18
15 1 5 2019-09-19
16 1 5 2019-09-20
17 1 5 2019-09-25
18 1 5 2019-09-26
19 1 5 2019-09-27
20 1 5 2019-09-30
21 1 5 2019-10-01
22 1 5 2019-10-01
23 1 5 2019-10-04
24 1 5 2019-10-10
所以在我的 history_table 中,我得到了每个月的 date_range,这取决于用户每天更改成本的次数。
基本上是这样
输出应该是这样的
id price range_date total_usage
1 10 2019-09-01 - 2019-09-15 SUM(total_usage) based on the date range
2 5 2019-09-16 - 2019-09-30 SUM(total_usage) based on the date range
这是我当前的查询,此查询用于获取整个月的总和,但如果我编辑查询以获取每天的总和,我有一个重复的条目并不断得到错误的结果。我已经尝试按天对它进行分组。但它仍然是错误的。
SELECT SUM(total_usage) FROM (SELECT
p.id,
p.price,
DATE(p.from_range) AS first_range,
DATE(IF(p.to_range = '0000-00-00 00:00:00', DATE_ADD(LAST_DAY('2019-09-01'),INTERVAL 10 DAY)) AS second_range,
(c.total_usage)*p.price AS total_usage
FROM history AS p
INNER JOIN current_usage AS c
ON c.main_id = p.main_id
AND c.date_created BETWEEN DATE('2019-09-01') AND DATE(IF(p.to_range = '0000-00-00 00:00:00', DATE_ADD(LAST_DAY('2019-09-01'),INTERVAL 10 DAY))
GROUP BY p.id,current_usage.date_created) AS table1
任何将不胜感激。谢谢。
【问题讨论】:
标签: mysql database codeigniter