2016-12-27 6 views
1

ことで、私はこのテーブルを持っている:週間売上合計ロケーションID

locationid |Sales  |salesdate 
:----------|:--------:|--------: 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 
40   |571.00 |2007-01-01 
40   |1377.00 |2007-01-02 

私は約200のユニークなロケーションIDを持って、私の質問は、私は場所のIDで7日間の売上高を合計することができるだろうかありますか?

私の全体的な目標は、場所ごとに7箇所あたりの一日の売上と7日、昨年の売上を取得しています。

は、理論的には私はちょうどしかし、私はこれを行う方法がわからないんだけど、私は、(年により異なる)の周り52-53エントリを持つ必要があり、それぞれの日付と合計日付-7を取るだろう。

は、私は少し周りつつい及びこれを見つけた:

のみ総和を行い、場所ごとに合計していないと私はまだその部分を考え出したていないが
SELECT SUM(sales) as 'Total', 
     SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 7,101) 
       THEN sales ELSE 0 END) as 'Current', 
     SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 14,101) 
       THEN sales ELSE 0 END) as '7Days' , 
     SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 28,101) 
       THEN sales ELSE 0 END) as '14Days' 
FROM [MYSQL].[wfmsales].[sales_bk] 

。あなたの時間のために非常に前もってありがとう。これはstackoverflowの私の最初の投稿ですので、もし私が何か間違っていたら私に知らせてください。

答えて

1

日付演算に日付関数を使用します。私はあなたが望むものを出力わからないんだけど、最後の7日間、あなたが行うことができます:

SELECT locationId, SUM(sales) as sales_Total, 
     SUM(CASE WHEN salesdate >= CURDATE() - INTERVAL 7 DAYS THEN sales ELSE 0 END) as sales_Current 
FROM [MYSQL].[wfmsales].[sales_bk] 
GROUP BY locationId; 

あなたは、あなたが望む任意の期間のための追加SUM(CASE)式を追加することができます。

+0

はゴードンに感謝、私のための時間コンポーネントは無関係です。私は先に進み、これを試してみよう! –

0

SUM(CASE WHEN...)クエリが期待どおりに機能していると仮定すると、locationId列はGROUP BYである必要があります。

SELECT locationId, SUM(sales) as 'Total', 
      SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 7,101) 
        THEN sales ELSE 0 END) as 'Current', 
      SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 14,101) 
        THEN sales ELSE 0 END) as '7Days' , 
      SUM(CASE WHEN convert(varchar(11),salesdate,101) >= convert(varchar(11),GETDATE() - 28,101) 
        THEN sales ELSE 0 END) as '14Days' 
    FROM [MYSQL].[wfmsales].[sales_bk] 
    GROUP By locationId 
関連する問題