微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PostgreSQL串行每日记录数

如何解决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 举报,一经查实,本站将立刻删除。