GreenPlum大きなテーブル名にを購入すると、400万行以上の行が含まれているが購入されます。ここでは、この表の例である:特定の列でシフト操作のグループ化SQL
userId | purchaseTime | timeDiff
------------------------------------------
17 | 2016-02-01 11:01:02 |
17 | 2016-02-01 13:24:58 |
17 | 2016-02-01 21:12:36 |
67 | 2016-02-01 17:04:49 |
84 | 2016-02-01 16:13:20 |
94 | 2016-02-01 05:46:13 |
94 | 2016-02-01 21:33:19 |
テーブルが
私の目標は、時間の違いを含めることで、このテーブルを更新することである私の目標を理解するために、ユーザーIDとpurchaseTimeによって命じられました各ユーザーの現在の行と最後に購入した時刻との間
それは次のようになり作る:
userId | purchaseTime | timeDiff
------------------------------------------
17 | 2016-02-01 11:01:02 | NULL
17 | 2016-02-01 13:24:58 | 2:23:56
17 | 2016-02-01 21:12:36 | 8:12:38
67 | 2016-02-01 17:04:49 | NULL
84 | 2016-02-01 16:13:20 | NULL
94 | 2016-02-01 05:46:13 | NULL
94 | 2016-02-01 21:33:19 | 16:13:06
あなたの答えのいずれかから選択が私を助けました。今私は更新を行う必要がありますが、更新の近くで構文エラーが発生しています:
WITH tmp_table AS
(
SELECT userId ,
purchaseTime ,
purchaseTime - LAG(purchaseTime)
OVER (PARTITION BY userId ORDER BY purchaseTime) AS timeDiff
FROM purchases
)
UPDATE purchases SET timeDiff = tmp_table.timeDiff
FROM tmp_table
WHERE userId = tmp_table.userId
AND purchaseTime = tmp_table.purchaseTime;
誰でも私のテーブルを更新するのに役立つことができますか?
ラグ関数を使用して、目的の結果を取得します。 – Madhukar
テーブル全体を更新する場合は、新しいテーブルを作成する方がはるかに良いでしょう。基本的に、テーブル全体を更新すると、ディスク上のサイズが倍になります。 –