我想计算2个日期之间的所有条目(截至今天的最后一周),如果没有,请选择0.目前它的打印方式如下:
+-------+------------+
| items | SellDate |
+-------+------------+
| 1 | 2017-01-01 |
+-------+------------+
| 3 | 2017-01-02 |
+-------+------------+
| 1 | 2017-01-03 |
+-------+------------+
| 5 | 2017-01-06 |
+-------+------------+
但是,我需要像这样印刷的东西:
+-------+------------+
| items | SellDate |
+-------+------------+
| 1 | 2017-01-01 |
+-------+------------+
| 3 | 2017-01-02 |
+-------+------------+
| 1 | 2017-01-03 |
+-------+------------+
| 0 | 2017-01-04 |
+-------+------------+
| 0 | 2017-01-05 |
+-------+------------+
| 5 | 2017-01-06 |
+-------+------------+
| 0 | 2017-01-07 |
+-------+------------+
我的查询如下:
SELECT
COUNT(Item.id) AS Items,
DATE(Item.sold_at) AS SellDate
FROM Item
WHERE Item.sold_at IS NOT NULL AND Item.sold_at BETWEEN DATE(DATETIME('now', 'localtime', '-6 days')) AND DATE(DATETIME('now', 'localtime', '+1 day'))
GROUP BY SellDate
我做错了什么?
答案 0 :(得分:2)
据我所知,如果没有SQLite 3.8.3及更高版本支持recursive common table expression,这是不可能的。使用相应的版本,您可以通过将日期范围与项目列表相结合来实现:
WITH RECURSIVE dates(date) AS (
VALUES(DATE(DATETIME('now', 'localtime', '-6 days')))
UNION ALL
SELECT date(date, '+1 day')
FROM dates
WHERE date < DATE(DATETIME('now', 'localtime', '+1 day'))
)
SELECT
date,
COUNT(Item.id) AS Items
FROM
dates
LEFT JOIN
Item
ON
dates.date = Item.SellDate
GROUP BY
SellDate