我正在尝试构建一个查询,根据列提供给我的唯一记录。这是简化的数据样本:
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
答案 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以了解需要做什么。