2017-06-30 3 views
0

データベースには、数多くの個別アイテムがあり、それぞれに複数の最初に販売された日付と1週間ごとの販売結果があります。私は最初の12週間の販売の各製品の総額が必要です。我々はSUM(CASEを使用して開始日を知っているときSQL合計12週間の異なるデータ間の最初の販売日に基づくデータ

コードは、前の個々のクエリのために使用された。これは、レビューする製品の何千もかかわらず、あまりにもマニュアルであり、我々はこれをスピードアップするためにスマートな方法を探しています。

このようにして、合計で最小の最初の店舗日付を見つけ、次に12週間の結果を合計することができますか?その場合、どのように構造化すればよいですか、より良い方法がありますか?

データベースの列Iサンプルデータで参照する必要があります

PROD_ID | WEEK_ID | STORE_ID | FIRST_SHOP_DATE | ITM_VALUE

12345543 | | 201607 | | 10000001 | 201542 | 24,356

12345543 | | 201607 | 10000002 | 201544 | 27,356

12345543 | | 201608 | | 10000001 | 201542 | 24,356

12345543 | | 201608 | 10000002 | 201544 | 27,356

32655644 | | 201607 | | 10000001 | 201412 | 103,245

32655644 | | 201607 | 10000002 | 201420 | 123,458

32655644 | | 201608 | | 10000001 | 201412 | 154,867

32655644 | | 201608 | 10000002 | 201420 |あなたはこのような何か行うことができます127865

+1

1)used.2ているDBMSにタグを付ける)いくつかのサンプルデータと予想される結果を示します。 –

+1

使用しているデータベースで質問にタグを付けてください。 –

+1

サンプルテーブルのデータと期待される結果をフォーマット済みのテキストとして追加します。使用しているDBMSにタグを付けます。あなたの現在のクエリの試みを私たちに教えてください。 – jarlh

答えて

2

select itemid, sum(sales) 
from (select t.*, min(shopdate) over (partition by itemid) as first_shopdate 
     from t 
    ) t 
where shopdate < first_stopdate + interval '84' day 
group by id; 

をあなたは、データベースを指定していないので、これはANSI標準構文を使用しています。日付操作(特に)はデータベースによって異なります。

0

こんにちはカースティ、次のように試してみてください -

select a.Item,sum(sales) as totla 
from tableName a JOIN 
(select Item, min(FirstSoldDate) as FirstSoldDate from tableName group by item) b 
ON a.Item = b.Item 
where a.FirstSoldDate between b.FirstSoldDate and (dateadd(day,84,b.FirstSoldDate)) 
group by a.Item 

感謝:)

関連する問題