選択列、集計値、および「selects-from-partitions」をどのように混合するのか疑問に思っています。これが重複した質問である場合はお知らせください。
私が意味することの例:
与えられたトランザクション ログの例:
ID Food Date Cost
1 Apple 5/1/14 10
1 Apple 5/4/14 8
1 Apple 5/6/14 15
1 Pear 5/2/14 25
2 Apple 5/3/14 15
目標は、一意の ID と食品の組み合わせごとに、最初の購入のコスト (日付別)、最後の購入、および平均コストを選択することです。
出力は次のようになります。
ID Food First_Cost Last_Cost Avg_Cost
1 Apple 10 15 11
1 Pear 25 25 25
2 Apple 15 15 15
OVER - PARTITION (各 GROUP BY グループの最初の行を選択しますか? ) と、集計関数と一緒にグループ化 ( https://dba.stackexchange.com/questions/41494/select-first-row-grouping-add )を調べました。 -aggregate-function ) しかし、どちらもこの特定の質問に答えていないようです。
これは私が達成しようとしていることのコード例です:
select id
,food
,firstrow(cost) OVER(PARTITION BY id, food ORDER BY date asc as first_cost
,avg(cost) from table
group by id, food;
集計関数がオフになるため、を使用してROWNUMBER() OVER(PARTITION...)
から where 句でフィルタリングすることも機能しないようです。
1 つの解決策は常に、最初のテーブル、最後のテーブル、平均のテーブルを作成し、3 つを結合することですが、よりクリーンなものを探しています。
EDIT : jpw のコメントから、Aster には first_value() ウィンドウ関数があります。ただし、問題は、並べ替えまたはパーティション化する列を groupby 句に含める必要があることです。彼の提案と 1 つの解決策は、すべての集計関数をウィンドウ関数に変更し、groupby を完全に削除することです。
よりクリーンな解決策またはこれが不可能であることの確認を見たいと思います!