以下是我在csdn的sql server版提问的问题,以及得到的回答
数据库是sql server express 2005的;
表名是table1;
表的结构:productid(产品代码)、price(价格)、discount(折扣)、supplyid(供应商代码)
主键是productid+supplyid
表的内容:
productid price discount supplyid
0001 0.5 0.02 1
0001 0.4 0.03 2
0001 0.4 0.01 3
0002 1 0 1
0002 0.8 0 2
0002 0.9 0 3
0003 0.8 0.02 1
0003 0.7 0.01 2
0003 0.8 0.03 3
无论纪录有多少条,supplyid只有3个,即为1,2,3
productid可能有很多,上面的只是例子
寻找一条sql查询语句,要求:
查出每一个productid,discount最小的那一行,对于每个productid,只给出合适的一条纪录
上面那表查询的结果应该为(对于discount一样的,给出任一行就行了)
0001 0.4 0.01 3
0002 1 0 1
0003 0.4 0.01 3
create table table1
(productid varchar(10), price float, discount float, supplyid int)
insert table1
select '0001', 0.5, 0.02, 1
union all select '0001', 0.4, 0.03, 2
union all select '0001', 0.4, 0.01, 3
union all select '0002', 1, 0, 1
union all select '0002', 0.8, 0, 2
union all select '0002', 0.9, 0, 3
union all select '0003', 0.8, 0.02, 1
union all select '0003', 0.7, 0.01, 2
union all select '0003', 0.8, 0.03, 3
With cte
AS
(select row_number() over (order by productid, discount) as rowid, productid, price, discount, supplyid
from table1)
select c.productid, c.price, c.discount, c.supplyid from cte c
JOIN
(select productid, min(rowid) as rowid from cte
group by productid
)t
ON c.productid = t.productid AND c.rowid = t.rowid