我有一个包含客户 ID、日期和整数的 postgres 表。我需要找到日期在去年的每个客户 ID 的前 3 条记录的平均值。我可以使用下面的 SQL 使用单个 ID 来执行此操作(id 是客户 ID,周末是日期,maxattached 是整数)。
一个警告:最大值是每月,这意味着我们只查看给定月份中的最大值来创建我们的数据集,因此我们从日期中提取月份。
SELECT
id,
round(avg(max),0)
FROM
(
select
id,
extract(month from weekending) as month,
extract(year from weekending) as year,
max(maxattached) as max
FROM
myTable
WHERE
weekending >= now() - interval '1 year' AND
id=110070 group by id,month,year
ORDER BY
max desc limit 3
) AS t
GROUP BY id;
如何扩展此查询以包含所有 ID 和每个 ID 的单个平均数?
以下是一些示例数据:
ID | MaxAttached | Weekending
110070 | 5 | 2011-11-10
110070 | 6 | 2011-11-17
110071 | 4 | 2011-11-10
110071 | 7 | 2011-11-17
110070 | 3 | 2011-12-01
110071 | 8 | 2011-12-01
110070 | 5 | 2012-01-01
110071 | 9 | 2012-01-01
因此,对于此示例表,我希望收到以下结果:
ID | MaxAttached
110070 | 5
110071 | 8
这会平均每个 ID 在给定月份中的最高值(110070 为 6、3、5,110071 为 7、8、9)
注意:postgres 版本 8.1.15