rcvr_id(user id)、mth_id、および tpv の 3 つの列を持つテーブルがあります。mth_id は (2012-1900)*12+1,2,3 (1 月、2 月、3 月のいずれかによる) として計算されます。たとえば、2011 年 12 月の mth_id は 1344、2012 年 1 月の mth_id は 1345 です。3 番目の列は tpv で、10 進数で、その月のユーザーのトランザクションを保持します。テーブルの例は次のとおりです。
rcvr_id mth_id tpv
.
.
.
1 1326 23
1 1327 13
1 1329 9
1 1345 2
1 1330 25
1 1350 22
2 1325 31
2 1351 23
3 1327 130
3 1329 90
3 1345 20
3 1330 250
3 1350 220
.
.
.
他のユーザーについても同様です (mth_id は順序付けられない可能性があります) (rcvr_id と mth_id を合わせて主キーを作成します)。Rcvr 2 は無視する必要があります。なぜなら、彼は 1326 から 1350 の月の間に tpv を持っていないからです。
mth_id の欠落している行の値は、その月の rcvr の tpv が 0 であることを示しています。つまり、1328、1331 ~ 1344、1346 ~ 1350 tpv は 0 です。
問題: 2 つの列 rcvr_id,mth_id と 3 番目の列 -change_in_tpv を保持するテーブルを作成したいと考えています。たとえば、月 1327 の場合、行は次のようになります。
1 1327 10,i.e (tpv of 1327-tpv of 1326)
ユーザー 1 の場合: 1347 月の tpv=1347 月の tpv - 1346 月の tpv を変更します (両方の行が存在しない場合でも、tpv を 0 にする必要があります)。1346 の場合、tpv は = 1346 の tpv-1345 の tpv=-2 になります。
すべての受信機 (tpv が 1326 から 1350 の間) について、1327 から 1350 の月の tpv の変化を計算する必要があります。
詳細 : Teradata、100 万行以上。どうすれば効率的に実行できますか。
複数のクエリ/一時テーブルを使用できます