0

お手伝いいただける方へ、

mysql でデータ クエリを作成して、トランザクション ID でグループ化された行に増分番号を付け、次のトランザクション ID で番号付けを再開したいと考えています。

ここに私のデータサンプルがあります:

transaction_id | run_index
--------------------------
1001           | 20
1001           | 25
1001           | 31
1001           | 40
1002           | 4
1002           | 11
1002           | 16
1002           | 21
1002           | 35
1003           | 07
1003           | 18
1003           | 44

私はそれを次のようにしたい:

transaction_id | run_index | run_order
--------------------------------------
1001           | 20        | 1
1001           | 25        | 2
1001           | 31        | 3
1001           | 40        | 4
1002           | 4         | 1
1002           | 11        | 2
1002           | 16        | 3
1002           | 21        | 4
1002           | 35        | 5
1003           | 7         | 1
1003           | 18        | 2
1003           | 44        | 3

これは、データ分析アドホック レポート用です。

4

2 に答える 2

0
SELECT transaction_id,
       run_index,
       IF(@CG=transaction_id, @I:=@I+1, @I:=1),
       @CG:=transaction_id AS run_order
FROM ...
INNER JOIN (SELECT @I:=0, @CG:=-1) x

結果セットの例:

+---------+--------------------------------+--------------+
| feed_id | IF(@CG=feed_id,@I:=@I+1,@I:=1) | @CG:=feed_id |
+---------+--------------------------------+--------------+
|       8 |                              1 |            8 |
|       8 |                              2 |            8 |
|       8 |                              3 |            8 |
|      14 |                              1 |           14 |
|      14 |                              2 |           14 |
|      14 |                              3 |           14 |
|      14 |                              4 |           14 |
|      14 |                              5 |           14 |
|      14 |                              6 |           14 |
|      14 |                              7 |           14 |
+---------+--------------------------------+--------------+
于 2012-07-30T21:13:27.653 に答える
0
SELECT transaction_id, run_index, 
    CASE WHEN @transaction_id != transaction_id THEN (@run := 1) - !(@transaction_id := transaction_id) ELSE @run := @run + 1 END AS run_order
FROM (  SELECT transaction_id, run_index
        FROM table_name, (SELECT @transaction_id := NULL, @run := NULL) AS var
        ORDER by transaction_id ASC, run_index DESC) AS h

これはあなたが探しているものでなければなりません。

于 2012-07-30T21:11:14.703 に答える