У меня проблема с получением суммы каждого дня за весь месяц, я уже могу получить сумму за весь месяц, но если я получаю сумму за каждый день, я получаю неправильные результаты, строки дублируются, этопросто странно, потому что, когда я суммирую все это, я получаю правильный ответ, и если я получаю сумму за каждый день, это неправильно.
вот моя таблица.
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
Любой был бы очень благодарен. спасибо.