我有一张表,其中一列为date
。每个日期可以有多个条目。
date .....
----------- -----
2015-07-20 ..
2015-07-20 ..
2015-07-23 ..
2015-07-24 ..
我想使用 Django ORM 和 PostgreSQL 作为数据库后端来获取以下形式的数据:
date count(date)
----------- -----------
2015-07-20 2
2015-07-21 0 (missing after aggregation)
2015-07-22 0 (missing after aggregation)
2015-07-23 1
2015-07-24 1
对应的 PostgreSQL 查询:
WITH RECURSIVE date_view(start_date, end_date)
AS ( VALUES ('2015-07-20'::date, '2015-07-24'::date)
UNION ALL SELECT start_date::date + 1, end_date
FROM date_view
WHERE start_date < end_date )
SELECT start_date, count(date)
FROM date_view LEFT JOIN my_table ON date=start_date
GROUP BY date, start_date
ORDER BY start_date ASC;
我在将此原始查询转换为 Django ORM 查询时遇到问题。
如果有人可以提供一个示例 ORM 查询(带/不带解决方法),那就太好了通用表表达式使用 PostgreSQL 作为数据库后端。
简单的理由已经引用了here:
我的偏好是在数据库中进行尽可能多的数据处理,而不是真正涉及的演示内容。我不羡慕在应用程序代码中执行此操作,只要它是一次数据库访问即可
As per 这个答案django 本身不支持 CTE,但答案似乎相当过时。
参考:
MySQL:即使没有记录,也选择范围内的所有日期
WITH 查询(公用表表达式)
Thanks