我有一张有销售订单的table,我想列出 COUNT
每天的销售订单数量,在两个日期之间,不留日期间隔。
这是我目前的情况:
SELECT COUNT(*) as Norders, DATE_FORMAT(date, "%M %e") as sdate
FROM ORDERS
WHERE date <= NOW()
AND date >= NOW() - INTERVAL 1 MONTH
GROUP BY DAY(date)
ORDER BY date ASC;
我得到的结果如下:
6 May 1
14 May 4
1 May 5
8 Jun 2
5 Jun 15
但我想得到的是:
6 May 1
0 May 2
0 May 3
14 May 4
1 May 5
0 May 6
0 May 7
0 May 8
.....
0 Jun 1
8 Jun 2
.....
5 Jun 15
有可能吗?
3条答案
按热度按时间gfttwv5a1#
您将需要生成一个虚拟(或物理)表,其中包含范围内的每个日期。
可以使用序列表按如下方式完成。
然后,将这个虚拟表连接到查询中,如下所示。
请注意,您需要
LEFT JOIN
因此,即使输出结果集中没有数据,也会保留输出结果集中的行ORDERS
table。这个序列表是从哪里来的
seq_0_to_999999
? 你可以这样做。你可以在网站上找到关于这一切的详细解释http://www.plumislandmedia.net/mysql/filling-missing-data-sequences-cardinal-integers/
如果您使用的是mariadb版本10+,那么这些序列表是内置的。
zpgglvta2#
在飞行中创建一系列日期,并根据您的订单加入其中table:-
它可以处理多达1000天的日期范围。
请注意,根据您用于日期的字段类型,它可以更容易地提高效率。
编辑-根据请求,获取每个month:-
b5lpy0ml3#
首先创建一个日历表