如何获得每个月的最高日期?我不知道我在做什么错,但是数据是根据我的结果重复的。

这是桌子。

history table


|ID |  from_range   |      to_range       |     price  |      main_id
1   2019-09-01 00:00:00   2019-09-15 00:00:00       5           1
2   2019-09-16 00:00:00   2019-09-30 00:00:00       10          1
3   2019-10-01 00:00:00   2019-10-15 00:00:00       15          1
4   2019-10-16 00:00:00   2019-10-19 00:00:00       20          1
5   2019-10-20 00:00:00   0000-00-00 00:00:00       25          1


current_usage table


id    main_id    total_usage   date_created
1         1          10         2019-09-01
2         1          10         2019-09-02
3         1          10         2019-09-03
4         1          10         2019-09-04
5         1          10         2019-09-05
6         1          10         2019-09-06
7         1          20         2019-09-07
8         1          5          2019-09-08
9         1          5          2019-09-09
10        1          10         2019-09-10
11        1          10         2019-09-15
12        1          10         2019-09-16
13        1          10         2019-09-17
14        1          10         2019-09-18
15        1          10         2019-09-19
16        1          10         2019-09-20
17        1          20         2019-09-25
18        1          5          2019-09-26
19        1          5          2019-09-27
20        1          10         2019-09-30
21        1          10         2019-10-01
22        1          10         2019-10-02
23        1          10         2019-10-03
24        1          10         2019-10-10
25        1          10         2019-10-11
26        1          10         2019-10-12
27        1          10         2019-10-18
28        1          20         2019-10-20
29        1          5          2019-10-21
30        1          5          2019-10-22
31        1          10         2019-10-23


因此在history_table中,我获得了每个月的date_range,它取决于用户每天更改成本的次数。

所以基本上

输出应该是这样的

id   price         range_date         total_usage
1      5     2019-09-01 - 2019-09-15  SUM(total_usage) based on the date range
2      10    2019-09-16 - 2019-09-30  SUM(total_usage) based on the date range
3      15    2019-10-01 - 2019-10-15  SUM(total_usage) based on the date range
4      20    2019-10-16 - 2019-09-19  SUM(total_usage) based on the date range
5      25    2019-10-20 - 2019-10-31  SUM(total_usage) based on the date range


在那之后,我计划每个月对其进行汇总。根据那5行的输出

这是我当前的查询,如果它们仅具有一个价格历史记录,并且如果只有一个价格历史记录,那是一个单独的查询,但是对于多个价格历史记录,我确实很难获取范围每个月的总和。

SELECT price.price,
       price.from _range AS first_range,
       price.to_range AS second_range,
       (current_usage.total_usage),
       current_usage.date_created
FROM history AS price
INNER JOIN current_usage AS current_usage
        ON price.main_id = current_usage .main_id
INNER JOIN(SELECT MAX(to_range) AS maxdate
           FROM history
           GROUP BY YEAR(to_range), MONTH(to_range)) x ON price.to_range= maxdate


任何帮助将不胜感激,我真的需要一些帮助。

最佳答案

如果我理解正确,那么您只需要基于date_created表的current_usage的联接来放置Between from_rangeto_range表的history

SELECT
  p.id,
  p.price,
  DATE(p.from_range) AS first_range,
  DATE(IF(p.to_range = '0000-00-00 00:00:00', LAST_DAY(p.from_range), p.to_range)) AS second_range,
  SUM(c.total_usage) 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(p.from_range) AND DATE(IF(p.to_range = '0000-00-00 00:00:00', LAST_DAY(p.from_range), p.to_range))
GROUP BY p.id


我假设id表中的history列是您的主键。因此,SELECT子句中history表中其余的非聚合列在功能上是相关的,因此无需在GROUP BY中指定它们

关于mysql - 如何从MYSQL中获取每个月的最大日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58251954/

10-13 03:28