2016-05-13 9 views
0

平均取引サイズを月ごとに取得するテーブルを作成しており、MoM変更の列を追加したいと考えています。理想的な最終テーブルには、月、その月のAVG取引サイズ、前月からの平均取引サイズの変更があります。私は2015年のデータだけを見ているので、12行が必要ですが、代わりに私が持っているすべての日付の行を取得しています。RedshiftのMoM変更の計算に役立つ

select 
to_char(cast(closedate as date),'Month') as month, 
avg(amount) as average_amount, 
ROUND((1-(AVG(amount)/nullif(lag(avg(amount),1) over (order by closedate),0)))*100,1) as MoM_change 
from sf.sf_opportunity 
where to_char(cast(closedate as date),'YYYY') = '2015' 
GROUP BY closedate 
ORDER BY closedate ASC 
; 

編集:グループ1とグループ2の両方が機能しません。月のように作成/割り当てられたフィールドによるグループ化は、赤方偏移では機能しません。あなたはまた、あなたがする必要はありません

Group by 1 

によってグループに月置く必要があります

to_char(cast(closedate as date),'Month') 
+0

グループ内でto_char(キャスト(日付として閉じてください)、 '月')を試してみてください。 – Kostya

+0

私はこれを試してこのエラーを思い出しました:エラー:GROUP BY句に "sf_opportunity.closedate"集計関数で使用されています – Berra2k

+0

私はここでクローズドを変更する必要があると思います "ROUND((1-(AVG(amount)/ nullif(lg(avg(amount)、1)over(order by closedate)、0)))* 100 、1)も同様に " – Kostya

答えて

0

変更あなたのグループ:どちらも、次のエラーを返します我々はdiffult以来の順序でascを入れてください

+0

エラーが表示されます。ERROR:column "sf_opportunity.closedate(sf_opportunity.closedate)"と表示されます。 GROUP BY句に現われなければならない、または集約関数で使用する必要があります – Berra2k

0

:TO句によって

ERROR: column "sf_opportunity.closedate" must appear in the GROUP BY clause or be used in an aggregate function 
+0

これを実行するときに次のエラーが発生します:エラー:列 "sf_opportunity.closedate"はGROUP BY句に表示するか、集計関数で使用する必要があります – Berra2k

+0

ラダー関数のクローズドをto_char(キャスト(日付としてクローズ)、 'Month')に変更します。 – user3600910

+0

は、次のエラーを受け取ったときに同じエラー – Berra2k

0

関数で計算された後に値でグループ化する必要があります。前の値。

group by month 

を実行します。同様に:

group by 1 

結果の最初の列を参照します。

+0

を取得します。 'ERROR:column" sf_opportunity.closedate "はGROUP BY句に現われなければならないか、集約関数で使わなければならない" redshiftでは、 "月"のようなフィールドエイリアスを作成 – Berra2k

+0

2番目のステートメントは正確ではありません。次の問合せは、すべての赤色シフトインスタンスで実行されます。 'select count(*)、table_schema from month from information_schema.tables group by month' – user1658078

関連する問題