1

私は時系列データを扱っており、条件に一致した現在の行の前の行数を数える必要があります。たとえば、行の月の何ヶ月前に顧客が売上を上げたか (NETSALES > 0) を知る必要があります。理想的には、条件が失敗したときにリセットされる行カウンターを維持します (例: NETSALES = 0)。

この問題を解決するもう 1 つの方法は、NETSALES が 12 期間を超えた行にフラグを立てることです。

私が最も近づいたのは、

COUNT(*) 
OVER (PARTITION BY cust ORDER BY dt
  ROWS 12 PRECEDING) as CtWindow,

http://sqlfiddle.com/#!6/990eb/2

上記の例では、201310 は 12 として正しくフラグ付けされていますが、理想的には前の行は 11 でした。

ソリューションは、R または T-SQL で作成できます。

data.table の例で更新:

library(data.table)
set.seed(50)
DT <- data.table(NETSALES=ifelse(runif(40)<.15,0,runif(40,1,100)), cust=rep(1:2, each=20), dt=1:20)

目標は、以下のような「実行」列を計算することです-値がゼロの場合、ゼロにリセットされます

     NETSALES cust dt run
 1: 36.956464    1  1   1
 2: 83.767621    1  2   2
 3: 28.585003    1  3   3
 4: 10.250524    1  4   4
 5:  6.537188    1  5   5
 6:  0.000000    1  6   6
 7: 95.489944    1  7   7
 8: 46.351387    1  8   8
 9:  0.000000    1  9   0 
10:  0.000000    1 10   0
11: 99.621881    1 11  1
12: 76.755104    1 12  2
13: 64.288721    1 13  3
14:  0.000000    1 14  0 
15: 36.504473    1 15  1 
16: 43.157142    1 16  2 
17: 71.808349    1 17  3 
18: 53.039105    1 18  4 
19:  0.000000    1 19  0
20: 27.387369    1 20  1 
21: 58.308899    2  1   1
22: 65.929296    2  2   2
23: 20.529473    2  3   3
24: 58.970898    2  4   4
25: 13.785201    2  5   5
26:  4.796752    2  6   6
27: 72.758112    2  7   7
28:  7.088647    2  8   8
29: 14.516362    2  9   9
30: 94.470714    2 10  10
31: 51.254178    2 11  11
32: 99.544261    2 12  12
33: 66.475412    2 13  13
34:  8.362936    2 14  14
35: 96.742115    2 15  15
36: 15.677712    2 16  16
37:  0.000000    2 17  0
38: 95.684652    2 18  1
39: 65.639292    2 19  2
40: 95.721081    2 20  3
     NETSALES cust dt run
4

1 に答える 1