【问题标题】:How to get the sum of each day for the whole month如何获得整个月每一天的总和
【发布时间】: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


    【解决方案1】:

    您需要按年月分组。 mysql有这些year()month()函数

    SELECT sum(c.total_usage * p.price) as total_usage,
        p.id,year(c.date_created), month(c.date_created)
        FROM current_usage AS c
        INNER JOIN history AS p 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 year(c.date_created), month(c.date_created), p.id
    

    【讨论】:

    • p.id 在上面看起来是多余的,我真的看不出这会产生预期的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多