SQL查询唯一记录

时间:2012-06-27 13:07:38

标签: sql unique

我正在尝试构建一个查询,根据列提供给我的唯一记录。这是简化的数据样本:

version        first            last
a              joe              smith
b              jane             smith
c              biff             mcelroy
a              thad             dussledorf

我希望查询根据version返回唯一记录(所以在这种情况下是1,b和c的1个实例)。对于这些返回的行,应表示所有3列。所以理想的结果是:

version        first            last
a              joe              smith
b              jane             smith
c              biff             mcelroy

4 个答案:

答案 0 :(得分:1)

假设您的数据库支持窗口函数,最好的方法是:

select t.*
from (select t.*, row_number() over (partition by version order by version) as seqnum
      from t
     ) t
where seqnum = 1

这会为每个版本选择一个任意的“第一”行。

答案 1 :(得分:0)

我不确定这是否会有任何错误/问题:

select distinct version,
 (select top 1 [first] from tableName t1 where t1.version = t.version) as [first],
 (select top 1 [last] from tableName t1 where t1.version = t.version) as [last]
from tableName t

您可以在每个子查询中使用某种“按xxx排序”。

我不确定2个子查询总会带回相同的“顶级”记录......?

但这并不理想。你最好使用记录ID或时间戳或其他东西,然后你会使用不同的解决方案。

答案 2 :(得分:0)

如果您不想在多个版本中返回哪些唯一版本,您只需使用group by:

select version, first_name, last_name from table name group by version;

答案 3 :(得分:0)

您的问题的答案取决于数据库。如果您使用的是Oracle(pl / sql),那么您可以使用Rank over函数:

SELECT * FROM (SELECT版本,第一个,最后一个RANK()OVER(PARTITION BY版本ORDER BY优先)RANK FROM SomeTable)WHERE RANK = 1;

复制和粘贴此查询可能不起作用。所以请阅读http://www.techonthenet.com/oracle/functions/rank.php以了解需要做什么。