古いクエリ
SQL サーバーの場合:
SELECT ROW_NUMBER()
OVER (ORDER BY ShiptoID) AS Row,
ShiptoID
FROM YourShip
MYSQL の場合:
SELECT s.shiptoid,
@rownum := @rownum + 1 AS Row
FROM yourship s,
(SELECT @rownum := 0) r
オラクルの場合:
SELECT ShiptoID, ROWNUM AS Row,
ShiptoID
FROM YourShip
更新されたクエリ
MySQL の場合: * SQLFIDDLE : 同じページ内の他のテーブルを無視します。
クエリ:
select y.shiptoID, y.row
from (select shiptoID,
@row:=if(@x=shiptoID,@row,0) + 1 as row,
@x:=shiptoID
from yourship
order by shiptoID, row asc
)as y
結果:
SHIPTOID ROW
642218 1
642218 2
642218 3
3041077 1
3041077 2
3041340 1
Oracle の場合: Oracle にはRANK()
、DENSE_RANK()
OVER PARTITION
MYSQL と同様の があります。
したがって、ORACLE の MYSQL と同様のクエリを使用できます。しかし、最良の部分は、私が節で使用ROWNUM
したことです;)つまり、3つすべての中で最も簡単なロジック/構文と言いますORDER BY
参照 : * SQLFIDDLE
クエリ:
SELECT shiptoID,
DENSE_RANK() OVER
(PARTITION BY shiptoID ORDER BY rownum) AS row
FROM yourShip
;
結果:
SHIPTOID ROW
642218 1
642218 2
642218 3
3041077 1
3041077 2
3041340 1