5

sum() over (partition by) を使用しようとしていますが、その合計内でフィルター処理しています。私の使用例は、各製品の 1 か月のエントリまでの 12 か月の追跡を合計しているので、次のようになります。

ITEM    MONTH    SALES
Item A  1/1/2011     2
Item A  2/1/2011     5
Item A  3/1/2011     3
Item A  4/1/2011     7
Item A  5/1/2011    12
Item A  6/1/2011     8
Item A  7/1/2011     9
Item A  8/1/2011    15
Item A  9/1/2011     6
Item A  10/1/2011    7
Item A  11/1/2011   12
Item A  12/1/2011    1
Item A  1/1/2012     3
Item A  2/1/2012     4
Item A  3/1/2012     5
Item A  4/1/2012     6
Item A  5/1/2012     4
Item A  6/1/2012     8
Item A  7/1/2012     9
Item A  8/1/2012    12
Item A  9/1/2012    14
Item A  10/1/2012    8
Item A  11/1/2012   12
Item A  12/1/2012   16

次に戻ります:

ITEM      MONTH_BEGIN SALES TTM SALES
Item A    1/1/2012        3        87
Item A    2/1/2012        4        88
Item A    3/1/2012        5        87
Item A    4/1/2012        6        89

1/1/12 の TTM SALES は 1/1/11-12/1/11 の合計です

4

2 に答える 2

3

分析以外のことを受け入れる場合SUM()は、単純な相関サブクエリを使用した解決策を次に示します。

SELECT s.item, s.month month_begin, s.sales,
       (SELECT SUM(sales) FROM sales 
         WHERE month BETWEEN DATEADD(month, -12, s.month) 
                         AND DATEADD(month,  -1, s.month)) ttm_sales
  FROM sales s 
 WHERE s.month BETWEEN '20120101' AND '20121201'

出力例:

| | アイテム | MONTH_BEGIN | セールス | TTM_SALES |
-------------------------------------------------- ---------------
| | アイテムA | 2012 年 1 月 1 日 00:00:00+0000 | 3 | 87 |
| | アイテムA | 2012 年 2 月 1 日 00:00:00+0000 | 4 | 88 |
| | アイテムA | 2012 年 3 月 1 日 00:00:00+0000 | 5 | 87 |
| | アイテムA | 2012 年 4 月 1 日 00:00:00+0000 | 6 | 89 |
...

これがSQLFiddleのデモです

于 2013-07-21T04:11:38.307 に答える