日期:2014-05-17  浏览次数:20847 次

请教SQL问题。查询最小值的ID
ID      NO              Price
239 TRA13120001 490.00
240 TRA13120001 100.00
241 TRA13120001 490.00
242 TRA13120001 480.00
243 TRA13120009 490.00
244 TRA13120009 490.00
245 TRA13120009 430.00
246 TRA13120009 490.00
247 TRA13120002 450.00
248 TRA13120002 490.00
249 TRA13120002 490.00

上面是数据库数据,求教各位如何写sql语句,去除NO重复,查询出最小Price 的ID 不要使用Order By 我试了好多,都不行谢谢各位了!

得到结果
240
245
247

------解决方案--------------------
with tb as
(
  select NO, min(price) as minprice
  from 表格
   group by NO
)
select 表格.* from 表格
inner join tb on tb.NO = 表格.NO and tb.minprice = 表格.price
------解决方案--------------------
--建表语句
create table tb(ID   int,   NO varchar(20), Price numeric(20,2))

insert into tb
select 239 ,'TRA13120001', 490.00 union all
select 240 ,'TRA13120001', 100.00 union all
select 241 ,'TRA13120001', 490.00 union all
select 242 ,'TRA13120001', 480.00 union all
select 243 ,'TRA13120009', 490.00 union all
select 244 ,'TRA13120009', 490.00 union all
select 245 ,'TRA13120009', 430.00 union all
select 246 ,'TRA13120009', 490.00 union all
select 247 ,'TRA13120002', 450.00 union all
select 248 ,'TRA13120002', 490.00 union all
select 249 ,'TRA13120002', 490.00
go


--查询
select ID
from 
(
select *,
   ROW_NUMBER() over(partition by NO order by Price) as rownum
from tb
)t
where rownum = 1
order by ID
/*
ID
240
245
247
*/

------解决方案--------------------
方法2:
--查询
select ID
from 
(
select *,
   (select COUNT(*) from tb t2 
    where t1.NO = t2.NO and t1.Price >= t2.Price and t1.ID <> t2.ID) as rownum
from tb t1
)t
where rownum = 0
order by ID
/*
ID
240
245
247
*/

------解决方案--------------------
----------------------------------------------------------------
--&nbs