你如何为每个ID选择第n行?

cha*_*ier 3 sql-server

如何为每个ID选择所有第n行?我的表看起来有点像这样:

    ID  fName   data
     1  Hari    20
     1  Hari    30
     2  John    89
     2  John    38
     2  John    55
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何为每个ID选择所有第二行?

结果如下所示:

    ID  fName   data
     1  Hari    30
     2  John    38 
Run Code Online (Sandbox Code Playgroud)

Nis*_*hia 5

这将有助于SQL SERVER 2012:

SELECT ID,  FNAME,   DATA FROM 
(
     SELECT TEST_DATA.*, 
     ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ORDER_BY_CONDITION) AS RANK
     FROM TEST_DATA
) T 
WHERE T.RANK=2
Run Code Online (Sandbox Code Playgroud)

按条件更改订单(相应地按ORDER_BY_CONDITION

这里是SQL SERVER 2012的小提琴:http://sqlfiddle.com/#!6/f59a1/3

编辑: 对于多个表,您可以尝试CTE,如小提琴:http://sqlfiddle.com/#!6/ 8a5b1d/10