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

SQL: How to select a record where the value is lowest per unique identifier

我是 SQL 的新手,过去几天一直在四处寻找答案,但似乎找不到明确的答案。 (或者我不理解给出的解决方案,因为它们与我的场景不符)

我有一个类似于下面的 table:

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

任何 pointers/guidance 非常感谢,我已经尝试了 MIN() 函数,但无法让它作为输出来执行此操作,所以我想我遗漏了一些东西。

(我有 SQL server 2008 r2 或 Microsoft report builder)

您可以使用 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()

这给出了你想要的结果:

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

假设 phones 是 table 的名称。
当然,如果有超过 1 行包含给定 unique_reference 的最低值 tel_priority,那么将提取所有这些行。

这是简单的解决方案。我已经测试过它的工作原理 fine.if 如果您喜欢这个答案,请投票

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