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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...