需要限制此查询平均的行-使用Postgres AVG

问题描述

需要帮助/我想做的是限制此查询取平均值的行数。我曾尝试限制行,但意识到查询仅返回1行,因此限制的平均值没有执行任何操作。理想情况下,我想返回最近的10次“ handled_at”时间,并将其平均。

SELECT
  avg(
    (
      (
        DATE_PART(
          'day',handled_at :: TIMESTAMP - created_at :: timestamp
        ) * 24 + DATE_PART(
          'hour',handled_at :: TIMESTAMP - created_at :: timestamp
        )
      ) * 60 + DATE_PART(
        'minute',handled_at :: TIMESTAMP - created_at :: timestamp
      )
    ) * 60 + DATE_PART(
      'second',handled_at :: TIMESTAMP - created_at :: timestamp
    )
  ) / 60
FROM
  registrations
WHERE
  state = 'admitted'
  AND registration_queue_id = 36

解决方法

这是您想要的吗?

select avg(extract(epoch from handled_at - created_at)) avg_diff_seconds
from (
    select *
    from registrations
    order by handled_at desc
    limit 10
) r

基本上,这会选择handled_at定义的最近的10行,然后对这些行上handled_atcreated_at之间的差求平均值。

请注意,我简化了日期算术:不需要多个date_parts(),它仅以秒为单位计算结果。

我还删除了timestamp强制转换;除非您以字符串格式存储值(这很糟糕!),否则这不是必需的。如果出于某些原因确实需要,可以将其放回原处。

相关问答

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