SQL:如何选择每个唯一标识符的值最低的记录

时间:2018-11-12 14:27:24

标签: sql sql-server-2008-r2 reportbuilder3.0

我是SQL的新手,过去几天一直在寻找有关此问题的答案,但似乎找不到确切的答案。 (或者我不理解所给出的解决方案,因为它们与我的方案不匹配)

我有一个类似于以下内容的表:

unique reference|tel number| tel priority
123|0123456910|2
123|0654321910|6
214|0056897910|4

我只希望输出每个唯一引用的电话号码优先级最低的数据,因此在上面的示例中,我想要:

unique reference|tel number| tel priority
123|0123456910|2
214|0056897910|4

非常感谢任何指针/指导,我已经尝试过MIN()函数,但无法将其作为输出来完成,所以我认为我缺少了一些东西。

(我有SQL Server 2008 r2或Microsoft报表生成器)

3 个答案:

答案 0 :(得分:0)

您可以使用row_number()

select t.*
from (select t.*, 
             row_number() over (partition by uniquereference order by priority) as seq
      from table t
     )
where seq = 1;

如果priority有关系,则使用dense_rank()代替row_number()

答案 1 :(得分:0)

这将提供您想要的结果:

SELECT * FROM phones WHERE tel_priority = (SELECT MIN(tel_priority) FROM phones p WHERE p.unique_reference = phones.unique_reference)

假设phones是表的名称。
当然,如果给定tel_priority的行中包含最低值unique_reference的行多于1条,则将提取所有这些行。

答案 2 :(得分:-1)

这是简单的解决方案。我已经测试过了,并且工作正常。如果您喜欢答案,请投票

 select * from tablename where tel_priority not in(select max(tel_priority) from tablename)