如何解决PostgreSQL串行每日记录数
我正在尝试获取从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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。