我是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报表生成器)
答案 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)