Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择日期范围之间的计数_Sql_Date_Select_Sqlite_Count - Fatal编程技术网

Sql 选择日期范围之间的计数

Sql 选择日期范围之间的计数,sql,date,select,sqlite,count,Sql,Date,Select,Sqlite,Count,我想计算从上周到今天的两个日期之间的所有条目,如果没有,请选择0。目前它的打印方式如下: +-------+------------+ | items | SellDate | +-------+------------+ | 1 | 2017-01-01 | +-------+------------+ | 3 | 2017-01-02 | +-------+------------+ | 1 | 2017-01-03 | +-------+------------

我想计算从上周到今天的两个日期之间的所有条目,如果没有,请选择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

我做错了什么?

据我所知,如果没有SQLite 3.8.3及更高版本中支持的。对于相应的版本,您可以通过将日期范围与项目列表合并来执行此操作:

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

你没有做错什么。SQL没有生成要放入结果集中的日期。源数据中不存在带零的日期。请查看此项。该解决方案运行良好,性能良好。有一件事我稍微调整了一下,那就是+1天。我完全把它拿走了,因为它明天会给我。这行是date