2017-09-20 1 views
0

Ich habe die folgende Tabelle und die Daten unter Verwendung einer AbfrageErste Zeilennummer basierend auf kat (MySql)

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

Ergebnis:

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

ich ausgeben wollen das Ergebnis unterhalb ohne row_number mit() oder andere Funktion, da meine RDBMS diese nicht unterstützen können.

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

Werfen Sie einen Blick auf diese https://stackoverflow.com/questions/15930514/mysql-auto-increment-temporary-column-in-select -Statement/15930609 –

+0

Ausleihen tims rextester, können Sie das gewünschte Ergebnis wie folgt erreichen: http://rextester.com/UVKOW83483 – Strawberry

Antwort

0

Um ROW_NUMBER mit einer Trennwand in MySQL zu simulieren Sie einfach eine andere Session-Variable einführen können Spur des cate Gruppenwert zu halten, wie Sie über die Datensätze in notices laufen.

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; 

Demo hier:

Rextester

+0

NULL + 1 ??? Sicher nicht. Obwohl natürlich rn auf 1 in der ersten Reihe zurückgesetzt wird – Strawberry

+0

@Strawberry Lesen Sie es noch einmal. Für den ersten Datensatz wäre '@ cate' (welches null ist) nicht gleich 'cate' und daher würde die Zeilennummer mit 1 gesetzt werden. –

Verwandte Themen