顧客 ID、日付、および整数を含む postgres テーブルがあります。昨年の日付を持つ各顧客 ID の上位 3 つのレコードの平均を見つける必要があります。以下の SQL を使用して、単一の ID でそれを行うことができます (id は顧客 ID、週末は日付、maxattached は整数です)。
1 つの注意点: 最大値は 1 か月ごとです。つまり、特定の月の最高値のみを調べてデータセットを作成しているため、日付から月を抽出しているのです。
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 とそれぞれの 1 つの平均値を含めるにはどうすればよいですか?
サンプルデータは次のとおりです。
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