我有一个卖单的表,我想在两个日期之间列出每天的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
那可能吗?
解决方法:
动态创建一系列日期并加入针对您的订单表: –
SELECT sub1.sdate, COUNT(ORDERS.id) as norders
FROM
(
SELECT DATE_FORMAT(DATE_SUB(Now(), INTERVAL units.i + tens.i * 10 + hundreds.i * 100 DAY), "%M %e") as sdate
FROM (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)units
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)tens
CROSS JOIN (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9)hundreds
WHERE DATE_SUB(Now(), INTERVAL units.i + tens.i * 10 + hundreds.i * 100 DAY) BETWEEN DATE_SUB(Now(), INTERVAL 1 MONTH) AND Now()
) sub1
LEFT OUTER JOIN ORDERS
ON sub1.sdate = DATE_FORMAT(ORDERS.date, "%M %e")
GROUP BY sub1.sdate
这可以应对最多1000天的日期范围.
请注意,根据您在日期中使用的字段类型,可以更轻松地提高效率.
SELECT aMonth, COUNT(ORDERS.id) as norders
FROM
(
SELECT DATE_FORMAT(DATE_SUB(Now(), INTERVAL months.i MONTH), "%Y%m") as sdate, DATE_FORMAT(DATE_SUB(Now(), INTERVAL months.i MONTH), "%M") as aMonth
FROM (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11)months
WHERE DATE_SUB(Now(), INTERVAL months.i MONTH) BETWEEN DATE_SUB(Now(), INTERVAL 12 MONTH) AND Now()
) sub1
LEFT OUTER JOIN ORDERS
ON sub1.sdate = DATE_FORMAT(ORDERS.date, "%Y%m")
GROUP BY aMonth
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。