2017-01-06 25 views
0

私は売り手による毎週の売り上げを示すこの表を持っています。現在のクエリ(添付)には2つの列しかありません。 YTD(Year To Date)の売上データを伴う3番目の列を追加したいと思います。誰かがこれを支援してくれますか?現在のSQL文に何を追加できますか?週にYTDを表示

select t2.Source, coalesce(t1."This Week",0) "This Week" 
from sellers t2 left outer join 
(select Source,min("Week") as Week, sum(Sales) "This Week" 
from salesdata 
where Week = date_trunc('week', now())::date - 1 
group by Source, Week) t1 
on t1.Source = t2.Source 

現在の結果:

Source   This Week 

Judith    18 
Thedia    64 
Alfonso    0 
Michael    15 
Jordan    0 

望ましい結果:

SELECT source, week, "This Week", "YTD" 
FROM (
    SELECT source, week, coalesce(sum(sales), 0) AS "This Week" 
    FROM salesdata 
    WHERE week = date_trunc('week', now()) - 1) sw 
JOIN (
    SELECT source, coalesce(sum(sales), 0) AS "YTD" 
    FROM salesdata 
    WHERE date_trunc('year', week) = date_trunc('year', now()) sy USING (source); 

Source   This Week    YTD 

Judith    18     100 
Thedia    64     150 
Alfonso    0     258 
Michael    15     487 
Jordan    0     78 
+0

また、ytdの売上を計算する方法を説明してください。 –

+0

ウィンドウの関数: 'sum(sales)over(パーティションはt2.sourceの注文を週別に)'でしょうか? –

+0

date_trunc( 'week'、now()):: date - 1 ...この関数は、渡された日曜日のデータを返します。この場合、1/1/2016から1/1/2017になります。 –

答えて

1

フィールドweekがあなたのテーブルにタイプdateであると仮定すると、 sellersテーブルは必要ありません。すべての情報はsalesdataテーブルから取得できます。

+0

ありがとうパトリック、ERROR: "sy"またはその近くの構文エラー LINE 9:WHERE year :: date = date_trunc( 'year'、now())sy USING(... 'sy'に何かが起こっています。 –

+0

問題はあなたの日付情報をどのように取得するのか分かりません。たとえば、 'year'が' integer'の場合、 'year = extract(year from current_time):: integer'を使用する必要があります。 – Patrick

+0

おかげでPatrick、私はちょうど関連するフィールドを1つしか持たないし、それは 'Week'であり、それはあなたのテーブルの 'timestamp'であり、あなたは' date_trunc( 'year'、field)= date_trunc( 'year'、current_time) 'Week'には前年度のデータがあります。 –

関連する問題