问题描述
我正在尝试获取从1月1日到日期的记录总数,而不跳过日期,对于没有记录的日期返回0。
我尝试了以下操作:orders是一个示例表,orderdate是一个timestamp列
with days as (
select generate_series(
date_trunc('day','2020-01-01'::timestamp),date_trunc('day',now()),'1 day'::interval
) as day
)
select
days.day,count(orders.id)
from days
left outer join orders on date_trunc('day',orders.orderdate) = days.day
where orders.orders_type='C'
group by 1
问题在于日期被跳过。 但是如果我执行:
select generate_series(
date_trunc('day','1 day'::interval
)
我得到了正确的系列,没有跳过任何日期。
解决方法
public function someControllerMethod(BaseFormRequest $Request) {
$MyRequest = $Request->convertRequest(MyRequest::class);
}
条件应属于where
的{{1}}子句,即:
on
应写为:
left join
注意:
-
您实际上不需要cte,您可以将
from days left outer join orders on date_trunc('day',orders.orderdate) = days.day where orders.orders_type='C'
直接放在from days left outer join orders on date_trunc('day',orders.orderdate) = days.day and orders.orders_type='C'
子句中 -
可以将日期联接条件优化为避免使用
的索引友好表达式generate_series()
-
表别名使查询更易于读写
您可以将查询编写为:
from