0

だから私はABだけを見たいこのテーブルを持っています。

ID     CODE       COUNT   
102    AB         9
101    AB         8
100    AC         23    //not important!!!!
99     AB         7
98     AB         6
97     AB         5
96     AB         0

このテーブルをこのように見せたい

ID    NEWID     CODE       COUNT   
102   102       AB         9
101   101       AB         8
99    100       AB         7
98    99        AB         6
97    98        AB         5
96    97        AB         0

コードがABである場合に連続してカウントされる新しいIDを取得するにはどうすればよいですか?

次に、これはSELECTクエリに使用されます。初期テーブルはそのままである必要があるため、これはテーブルを更新するのではなく、架空のNEWIDを作成するだけです。

4

3 に答える 3

1

ユーザー変数を使用して、これを実行するためのカウンターを作成できます(1つのクエリで!)。

SELECT t.ID, @NEWID := COALESCE(@NEWID - 1, t.ID) AS NEWID, t.CODE, t.COUNT
FROM
    (SELECT ID, CODE, COUNT FROM some_table WHERE CODE = 'AB' ORDER BY ID DESC) t,
    (SELECT @NEWID := NULL) _uv;
mysql> SELECT t.ID, @NEWID := COALESCE(@NEWID - 1, t.ID) AS NEWID, t.CODE, t.COUNT
    -> FROM
    ->     (SELECT ID, CODE, COUNT FROM some_table WHERE CODE = 'AB' ORDER BY I
D DESC) t,                                                                        
    ->     (SELECT @NEWID := NULL) _uv;
+------+-------+------+-------+
| ID   | NEWID | CODE | COUNT |
+------+-------+------+-------+
|  102 |   102 | AB   |     9 |
|  101 |   101 | AB   |     8 |
|   99 |   100 | AB   |     7 |
|   98 |    99 | AB   |     6 |
|   97 |    98 | AB   |     5 |
|   96 |    97 | AB   |     0 |
+------+-------+------+-------+
6 rows in set (0.03 sec)

編集:これがそのためのSQLフィドルです。(なんてクールなツールだ。これが存在するなんて知らなかった!)

于 2013-01-26T10:00:28.647 に答える
0

あなたはこれを使うことができます:

SELECT
   Id, @newid := @newid - 1 as NEWID, CODE, CNT
FROM Tbl,
(SELECT @newid := MAX(ID) + 1 FROM Tbl) A
WHERE CODE != 'AC'
ORDER BY NEWID DESC

SQLフィドル

于 2013-01-26T09:47:36.257 に答える
0

これを試して:

SELECT MIN(ID) - 1
FROM tab
WHERE CODE = 'AB'
INTO @i;

SELECT tab.ID, (@i := @i + 1) AS NEWID, tab.COUNT
FROM tab
WHERE tab.CODE = 'AB'
ORDER BY tab.ID;

http://sqlfiddle.com/#!2/2b52e2/1も参照してください。

于 2013-01-26T09:48:50.310 に答える