需要限制此查询的平均行数-使用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铸件;这是不必要的,除非您以字符串格式存储值(这很糟糕!(。如果出于某种原因真的需要,你可以把它放回去。

最新更新