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)
我是 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)