MySQL按两列日期作为范围分组

时间:2019-02-21 18:57:08

标签: mysql

我有一个MySQL数据库,我想总结给定时间范围内的总数。这是我的桌子:

 |NO | total | start_date | completion_date |
 +---+-------+------------+-----------------+
 |1  | 12    |2017-09-11  |2017-10-11       |
 |2  | 64    |2017-12-05  |2018-02-02       |
 |3  | 22    |2017-12-12  |2018-03-01       |
 |4  | 10    |2017-12-13  |2018-07-11       |

鉴于此表,我希望每个月的帐户总数在给定的起始日期至完成日期之间。

例如,在第三行中,12月至3月的月份总计为22。星期几无关紧要。

该表可能是:

 |NO | total | date       |
 +---+-------+------------+
 |1  | 12    |2017-09     |
 |2  | 12    |2017-10     |
 |3  | 64    |2017-12     |
 |4  | 64    |2018-01     |
 |5  | 22    |2017-12     |
 |6  | 22    |2018-01     |
 |7  | 22    |2018-02     |
 |5  | 22    |2018-03     |

依此类推...

我尝试使用以下间隔:

start_date - interval 1 month

但是我不确定如何具体执行此操作,因为我有两列,start_date和completion_date,它怎么知道为每一行更改此间隔?

1 个答案:

答案 0 :(得分:0)

我相信这会为您提供所需的结果:

(
SELECT 
  sum(total), 
  date_format(
    start_date, '%Y-%m'
  ) as dates 
FROM 
  test 
GROUP BY 
  dates
)
UNION
(
SELECT 
sum(total), 
  date_format(
    end_date, '%Y-%m'
  ) as dates 
FROM 
  test 
GROUP BY 
  dates
)
ORDER BY dates;

结果:

| sum(total) | dates   |
| ---------- | ------- |
| 12         | 2017-09 |
| 12         | 2017-10 |
| 96         | 2017-12 |
| 64         | 2018-02 |
| 22         | 2018-03 |
| 10         | 2018-07 |

View on DB Fiddle