我有一个表 T
与列 x
, y
, a
, b
这样
SELECT x,y,a,b FROM T
ORDER BY x,y,a,b
给我下表
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
我如何获得每个 x,y 组的第一行?也就是说,我将如何获得下表
x | y | a | b
x1 | y1 | a1 | b1
x1 | y2 | a1 | b1
这是第二个例子:对于表 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
我期待得到
x | y | a | b
x1 | y1 | a1 | b3
x1 | y2 | a1 | b3
最佳答案
考虑 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
关于sql - 从每个组中选择第一行,ORDER BY 超过一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11424506/