您需要一个“控制”表来记录您试图包含的所有月份。这可以通过“日历”表来完成,或者通过在“成员”表中包含所有月份的记录作为“占位符”来完成。
有一个更好的方法来实现这一点,但是,例如,这是一个想法(使用上面链接中的数据)
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