2017-09-20 21 views
0

は、私は次の表のデータは、クエリを使用している取得行番号(MySQLの)

SELECT b.*, (@rownum :[email protected] +1) AS row_number 
FROM notices b, (SELECT @rownum := 0) row 

結果:

id cate rownumber 
------------------- 
1 5  1 
2 5  2 
3 6  3 
4 5  4 
5 5  5 
6 5  6 
7 5  7 

私は出力にROW_NUMBERを使用せずに、以下の結果をしたいです()または私のrdbmsはこれらをサポートできないので、他の関数です。あなたは単にあなたがnotices内のレコードを反復処理するようcateグループ値を追跡するために、別のセッション変数を導入することができますMySQLでのパーティションにROW_NUMBERをシミュレートする

id cate rownumber 
------------------- 
1 5  1 
2 5  2 
3 6  1 
4 5  3 
5 5  4 
6 5  5 
7 5  6 
+0

このhttps://stackoverflow.com/questions/15930514/mysql-auto-increment-temporary-column-in-selectを見てください-statement/15930609 –

+0

借用時間rextester、あなたは次のように望ましい結果を達成することができます:http://rextester.com/UVKOW83483 – Strawberry

答えて

0

SET @rn = NULL; 
SET @cate = NULL; 

SELECT id, cate, rn 
FROM 
(
    SELECT 
     @rn:=CASE WHEN @cate = cate THEN @rn + 1 ELSE 1 END AS rn, 
     @cate:=cate, 
     id, 
     cate 
    FROM notices 
    ORDER BY 
     cate, id 
) t 
ORDER BY cate, rn; 

ここにデモ:

Rextester

+0

NULL + 1 ???確かにそうではありません。もちろん、rnは最初の行で1にリセットされますが、 – Strawberry

+0

@Strawberryもう一度お読みください。 '@cate'(これはヌル)の最初のレコードは' cate'と等しくないので、行番号は1でシードされます。 –

関連する問題