sql - 从每个组中选择第一行,ORDER BY 超过一列

标签 sql performance group-by sql-order-by sybase

我有一个表 T 与列 xyab 这样

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/

相关文章:

performance - Postgresql 查询执行得非常糟糕

sql - 如何仅对表的特定行进行分组

sql - 如何计算 pgsql 中值大于 0 的逗号拆分值?

sql - 尽管使用 CAST 还是转换错误?

python - 为什么 Python 的 Numpy zeros 和空函数之间的速度差异对于更大的数组大小消失了?

performance - GLSL:为什么 const int 数组比普通数组慢这么多?

mysql - 仅当两行(不是任一行)都满足时才选择条件

mysql - 根据之前的 COUNT() 显示多个组的最大值

Mysql-从 select 中更新多列

mysql - sqlite GROUP BY 语句中的奇迹