我写了一个简单的查询
SELECT date, count(user) as count FROM sessions GROUP BY date;
回应是这样的
但是,我想查看每个日期,如果日期不存在,行必须是这样的
2018-02-01 | 0
2018-02-02 | 0
2018-02-03 | 0
2018-02-04 | 0
2018-02-05 | 1503582
2018-02-06 | 0
2018-02-06 | 0
2018-02-08 | 5612270
...
...
...
2018-02-31 | 0
我应该如何重写我的查询来获取飞蛾中每天的数据?
您需要首先生成一个日历并将其行与表连接起来session
通过date
柱子。下面的子查询将根据设置的值生成所有 1 个月@START_DATE
多变的。
SET @START_DATE = '2018-01-01'; -- set your starting date here
SELECT a.`DATE`,
COUNT(b.user) AS `COUNT`
FROM
(
SELECT DATE(cal.date) `DATE`
FROM (
SELECT @START_DATE + INTERVAL xc DAY AS date
FROM (
SELECT @xi:=@xi+1 as xc from
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc2,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc3,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) xc4,
(SELECT @xi:=-1) xc0
) xxc1
) cal
WHERE cal.date <= DATE_ADD(DATE_ADD(@START_DATE, INTERVAL 1 MONTH), INTERVAL -1 DAY)
) a
LEFT JOIN sessions b
ON a.`DATE` = b.`DATE`
GROUP BY a.`DATE`
ORDER BY a.`DATE`
这是一个Demo http://sqlfiddle.com/#!9/0a3d61/1.
生成日期的子查询是从这个借来的文章:在 MySQL 中生成一系列日期 http://www.shayanderson.com/mysql/generating-a-series-of-dates-in-mysql.htm并进行了一些修改以允许用户输入开始日期。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)