-2

以下是样本数据:

c1   c2   c3   c4   c5
1    a1   a     1     1
2    a2   a     2     1
3    a3   a     3     1
4    a4   a     4     1
5    b1   b     1     1
6    b2   b     2     1
7    b3   b     3     1
8    b4   b     4     1
9    a1   c     3     1 

我想获得以下详细信息:

c1  c2  c3  c4  c5
1    a1  a   1    1
5    b1  b   1    1
9    a1  c   3    1

C1是主键,标准是任何给定的唯一(c2),其中 c4 是最低的,我想返回该行的内容(所有 5 列)。

4

2 回答 2

2

试试这个:

SELECT t1.*
FROM Table1 t1
INNER JOIN
(
  SELECT c3, MIN(c4) c4 
  FROM Table1
  GROUP BY c3
) t2 ON t1.c3 = t2.c3 ANd t1.c4 = t2.c4

SQL 小提琴演示

更新:1 在SQL中返回的结果是一个集合(除非你指定一个ORDER BY子句,在这种情况下它是一个游标),其中的顺序是不保证的。这是一个标准。如果你想保证一个特定的顺序,你应该使用 ORDER BY 子句。在您的情况下,不保证结果会像1 5 9. ORDER BY c1改为添加。

在某些情况下,该ORDER BY子句可能很重要,例如,如果要获取前三行或最大行,在这种情况下,您必须指定一个ORDER BY子句。

因此,如果您想保留一个特定的订单,您必须指定一个ORDER BY.


1正如@Fahim Parker 所指出的,请参阅下面的评论。

于 2012-11-10T09:02:39.340 回答
0
select c1,c2,c3,c4,c5
from table
where c4= (select min(c4) from table as f where f.c4 = table.c4);

我希望这会有所帮助

于 2012-11-10T09:03:00.350 回答