选择每个组的第一行,使用ORDER BY多个列

Dan*_*aca 4 sql performance sybase group-by sql-order-by

我有一个表T的列x,y,a,b使得

SELECT x,y,a,b FROM T
ORDER BY x,y,a,b
Run Code Online (Sandbox Code Playgroud)

给我下表

 x    | y    | a    | b
 x1   | y1   | a1   | b1
 x1   | y1   | a1   | b2
 x1   | y1   | a2   | b1
 x1   | y2   | a1   | b1
 x1   | y2   | a1   | b2
 x1   | y2   | a2   | b1
Run Code Online (Sandbox Code Playgroud)

我如何获得每个x,y组的第一行?也就是说,我如何获得下表

 x    | y    | a    | b
 x1   | y1   | a1   | b1
 x1   | y2   | a1   | b1
Run Code Online (Sandbox Code Playgroud)

这是第二个例子:对于表格T这样

 x    | y    | a    | b
 x1   | y1   | a1   | b3
 x1   | y1   | a1   | b4
 x1   | y1   | a2   | b1
 x1   | y1   | a2   | b2
 x1   | y2   | a1   | b3
 x1   | y2   | a1   | b4
 x1   | y2   | a2   | b1
 x1   | y2   | a2   | b2
Run Code Online (Sandbox Code Playgroud)

我期待着

 x    | y    | a    | b
 x1   | y1   | a1   | b3
 x1   | y2   | a1   | b3
Run Code Online (Sandbox Code Playgroud)

Nit*_*dha 9

考虑SQL 2005或更高版本:

SELECT T1.X,
       T1.Y,
       T1.A,
       T1.B
  FROM
      (SELECT X,
              Y,
              A,
              B,
              ROW_NUMBER() OVER (Partition BY X,Y Order By A,B) AS RowNum
         FROM T
     ) T1
WHERE T1.RowNum = 1
Run Code Online (Sandbox Code Playgroud)