如何为多个列的每个唯一组合选择一行?

时间:2015-01-09 21:23:40

标签: sql sql-server

表/数据/ SQL示例:SQLFIDDLE

SELECT
  name,
  p1,
  p2,
  MIN(o1) as o1,
  MIN(o2) as o2
  FROM LOCS l
  GROUP BY l.name, l.p1, l.p2
  ORDER BY name asc

我提出的当前SQL返回正确的数据,但实际的表有100多列,并且不断变化,因此无法在每列上执行MIN()。

我需要为“name”,“p1”和“p2”的每个组合选择一行。

1 个答案:

答案 0 :(得分:2)

如果要选择在分组中选择“第一”行,则可以使用row_number() - 假设您有定义“第一”的方法。

例如,如果o1列指定了排序,则以下内容为特定namep1p2组合的行提供了最低值o1

SELECT l.*
FROM (SELECT l.*, ROW_NUMBER() OVER (PARTITION BY name, p1, p2 ORDER BY o1) as seqnum
      FROM LOCS l
     ) l
WHERE seqnum = 1
ORDER BY name asc;