【问题标题】:Get all months between two dates with count from table in MySql从MySql中的表中获取两个日期之间的所有月份
【发布时间】:2019-06-28 14:50:16
【问题描述】:

我已经写了查询在两天之间获取所有月份,其中成员数为计数,但无法获取整个月份。

SET @start_date = '2017-08-31'; 
SET @end_date = '2018-06-26'; 
SELECT COUNT(1) AS Y, DATE_FORMAT(created_date,'%b %y') AS X 
FROM members m 
WHERE 
    created_date >= @start_date AND 
    created_date <= @end_date 
GROUP BY X 
ORDER BY X;

我得到以下输出

1   Feb 18
1   Mar 18
1   Nov 17
2   Oct 17

但预期的结果会是

2 Oct 17
1 Nov 17
0 Dec 17
0 Jan 18
1 Feb 18
1 Mar 18

在线查询LINK

【问题讨论】:

  • 可以贴出你查询的数据吗?
  • 您没有缺失月份的数据,因此不会在查询中恢复它们
  • @DjellalMohamedAniss 我提到了 LINK。你可以找到帖子数据
  • @将使用此 URL stackoverflow.com/q/14811568/2126088。没有必要的缺失月份数据应该可用。
  • 就像@Will 说的,你没有那个数据

标签: mysql datetime difference


【解决方案1】:

请执行以下 SQL 以获得所需的输出: 选择 EXTRACT(YEAR FROM created_date) AS YEAR, EXTRACT(MONTH FROM created_date) AS MONTH, COUNT(1) 来自会员 按年、月分组

注意到您也应用了排序,请根据您的需要执行相同操作,它将获取带有年份和月份编号的计数。

有关提取功能的更多详细信息,请参见以下链接: https://www.w3schools.com/sql/func_mysql_extract.asp

【讨论】:

    【解决方案2】:

    您需要一个“控制”表来记录您试图包含的所有月份。这可以通过“日历”表来完成,或者通过在“成员”表中包含所有月份的记录作为“占位符”来完成。

    有一个更好的方法来实现这一点,但是,例如,这是一个想法(使用上面链接中的数据)

        CREATE TABLE members
    (
        member_id INT,
        name VARCHAR(100),
        created_date DATE
    );
    
    INSERT INTO members (member_id, name, created_date) VALUES (1, 'Anand Jee', '2017/10/10');
    INSERT INTO members (member_id, name, created_date) VALUES (2, 'Anil', '2017/11/21');
    INSERT INTO members (member_id, name, created_date) VALUES (3, 'Saurav', '2018/2/10');
    INSERT INTO members (member_id, name, created_date) VALUES (4, 'Amit', '2018/3/10');
    INSERT INTO members (member_id, name, created_date) VALUES (5, 'Nilesh', '2018/7/17');
    INSERT INTO members (member_id, name, created_date) VALUES (6, 'Nitesh', '2018/9/19');
    INSERT INTO members (member_id, name, created_date) VALUES (7, 'Ajay', '2019/2/21');
    INSERT INTO members (member_id, name, created_date) VALUES (8, 'Rahul', '2019/3/30');
    INSERT INTO members (member_id, name, created_date) VALUES (9, 'Sumit', '2019/7/17');
    INSERT INTO members (member_id, name, created_date) VALUES (10, 'Gautam', '2017/10/21');
    
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2017/08/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2017/09/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2017/10/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2017/11/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2017/12/1');
    
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/1/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/2/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/3/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/4/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/5/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/6/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/7/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/8/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/9/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/10/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/11/1');
    INSERT INTO members (member_id, name, created_date) VALUES (-1, 'ZERO', '2018/12/1');
    
    SET @start_date = '2017-08-31';
    SET @end_date = '2018-06-26';
    SELECT COUNT(1)-1 AS Y, DATE_FORMAT(created_date,'%b %y') AS X,DATE_FORMAT(created_date,'%y%m') AS Z
    FROM members m
    WHERE
    created_date >= @start_date AND
    created_date <= @end_date
    GROUP BY X,Z
    ORDER BY Z
    

    【讨论】:

      猜你喜欢
      • 2015-05-20
      • 1970-01-01
      • 2020-11-02
      • 2018-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多