コンテキストは、ユーザー ID とトランザクション ID がありますが、クライアントの設定により、ユーザー ID が変更されてもトランザクション ID が同じままになる場合があり (両方が一定である必要がある場合)、トランザクション ID が変更されてもユーザー ID が変更されない場合があります (したがって、 transactionid だけを使用することはできません)。
そのため、実際の ID として使用できるものを取得したいと考えています。新しい列 (つまり、実際の ID) は、行をグループ化するためにのみ使用されるため、任意の (一意の) 値にすることができます。順番は全く関係ありません。
例:
| userid | transactionid |
|--------|---------------|
| A | 1 |
| A | 2 |
| A | 3 |
| B | 2 |
| B | 2 |
| C | 4 |
| D | 5 |
| D | 5 |
| D | 6 |
| E | 6 |
| E | 7 |
| F | 4 |
次のようになります。
| userid | transactionid | actualid |
|--------|---------------|----------|
| A | 1 | A |
| A | 2 | A |
| A | 3 | A |
| B | 2 | A |
| B | 2 | A |
| C | 4 | C |
| D | 5 | E |
| D | 5 | E |
| D | 6 | E |
| E | 6 | E |
| E | 7 | E |
| F | 4 | C |
Presto を使用しているため、いくつかの制限があります (一時テーブルがない、集計クエリで DISTINCT がないなど)。
Python で for ループを使用するソリューションを次に示します。
しかし、Presto のソリューションが必要です。
これはもともとここの Gist に書かれていました: https://gist.github.com/jamesmcm/9b9a559eb9f69405c04a
表の適切な書式設定が必要な場合。