如何为列的最小数字显示一行?

时间:2009-01-29 16:05:00

标签: sql odbc

这个问题很复杂,所以示例效果最好......我有关于ODBC的下表,而不是SQL服务器管理

NAME     SEQNUM     

JOHN     2          
JOHN     4
JOHN     7
MARY     12
MIKE     4
MIKE     9
PETER    7
PETER    12

所以,我想撤回一个seqNum最低的名字......

NAME     SEQNUM
JOHN     2
MARY     12
MIKE     4
PETER    7

此数据不适用于SELECT (MIN(SEQNUM))。这会返回一个数字。我希望将实际数据放入我的数据集中。 有谁知道这是怎么做到的吗?

6 个答案:

答案 0 :(得分:14)

select Name, MIN(SEQNUM)
from TABLE
Group By Name

答案 1 :(得分:3)

我相信这就是你想要的:

select NAME, min(SEQNUM) as SEQNUM
from TABLE
group by NAME

答案 2 :(得分:2)

SELECT TOP 1 Name, SeqNum FROM yourtable ORDER BY SeqNum DESC

将显示SeqNum

最高的那个

答案 3 :(得分:1)

将Ian和Bill的答案结合在一起可以获得两全其美 - 访问完整记录,而不必进行可能非常昂贵的连接(任何不是等值连接的连接都可以像你不会那样炸毁相信)。

SELECT t1.* 
FROM yourtable t1,
     (SELECT name, MIN(seqnum) as seqnum
      FROM yourtable
      GROUP BY name) t2
WHERE t1.name=t2.name
      AND t1.seqnum=t2.seqnum

你也可以使用连接语法来获得相同的结果(而不是WHERE),但在这种情况下,如果你使用where,我认为它会更加清晰。

答案 4 :(得分:0)

SELECT t1.*
FROM yourtable t1
 LEFT OUTER JOIN yourtable t2 
 ON (t1.name = t2.name AND t1.seqnum > t2.seqnum)
WHERE t2.seqnum IS NULL;

重新。德姆斯的评论:

如果您只是使用GROUP BY name,则您的选择列表只能包含name和汇总功能MIN()。通常情况下,您确实需要每组最小值出现的整行。

如果您使用TOP解决方案(如果使用MySQL,PostgreSQL,SQLite,则为LIMIT),那么基于name,您无法获得多个组的最小值只能获得一个name的最小值。

我在OP的问题的行之间读到并猜测他们想要整行,列中的列比问题中显示的列多(总有),并且所需的查询应返回多个名称的结果,不只是一个。


重新。 SquareCog的评论:

您建议的解决方案也是加入:

SELECT t1.*
FROM yourtable t1
  JOIN (SELECT name, MIN(seqnum) AS seqnum FROM yourtable GROUP BY name) t2
  USING (name, seqnum);

但是,这个解决方案可能无法使用索引来评估连接,而我给出的解决方案可以。

答案 5 :(得分:0)

从表t中选择名称seq_num =(从表tt中选择max(sequnum),其中t.name = tt.name)

但我更喜欢分组。