问题描述
需要帮助/我想做的是限制此查询取平均值的行数。我曾尝试限制行,但意识到查询仅返回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_at
和created_at
之间的差求平均值。
请注意,我简化了日期算术:不需要多个date_parts()
,它仅以秒为单位计算结果。
我还删除了timestamp
强制转换;除非您以字符串格式存储值(这很糟糕!),否则这不是必需的。如果出于某些原因确实需要,可以将其放回原处。