如何为多列的每个唯一组合 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
列指定了排序,则下面给出了具有最低的特定 name
、p1
和 p2
组合的行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;
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
列指定了排序,则下面给出了具有最低的特定 name
、p1
和 p2
组合的行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;