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

How do I select a single row for each unique combination of multiple columns?

Table/Data/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我想出了returns正确的数据,但是实际的table有100多列,而且会不断变化所以没办法在每一列上执行 MIN()。

我需要 select 每个 "name"、"p1" 和 "p2" 组合的一行。

如果您想 select 到 select 分组中的 "first" 行,那么您可以使用 row_number() -- 假设您有定义 "first".

例如,如果 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;