2015-01-09 74 views
-1

表/数据/ 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()。

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

+0

目前还不清楚你问 – 2015-01-09 21:25:32

+2

你如何定义“第一行”? – 2015-01-09 21:26:12

+0

这是可以做到的,并不难,但正如@GordonLinoff所说,我们需要知道是什么让“排在第一位”。 – 2015-01-09 21:28:29

回答

2

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

举例来说,如果o1列指定的顺序,下面给出的行特定namep1,并与o1最低值p2组合:

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; 
相关问题