首页新闻找找看学习计划

如果用一条sql取每分类里的第一条数据?

0
[已解决问题] 解决于 2013-10-28 21:58

比如有分类表category。表中有A,B,C,D四个分类

商品表product中有一人categoryId与category关联。

请问:如何人product表中获取每个分类的第一条数据呢?

sql
小徐的博客的主页 小徐的博客 | 初学一级 | 园豆:22
提问于:2013-10-28 16:07
< >
分享
最佳答案
2
CREATE table Cate
(CateID int,
CateName Nvarchar(20));

CREATE table Product
(ProductID int,
CateID int,
ProductName Nvarchar(20));

INSERT Cate 
values
(1,'DemoA'),
(2,'DemoB'),
(3,'DemoC'),
(4,'DemoD')

INSERT PRODUCT 
values
(1,1,'PA'),
(2,3,'PB'),
(3,2,'PC'),
(4,2,'PD'),
(5,4,'PE'),
(6,3,'PF'),
(7,1,'PG'),
(8,4,'PH')

SELECT * FROM product;
/*
ProductID    CateID    ProductName
1    1    PA
2    3    PB
3    2    PC
4    2    PD
5    4    PE
6    3    PF
7    1    PG
8    4    PH
*/
--方法一:
Select t.CateID,t.ProductID,t.ProductName
From
(Select CateID,ProductID,ProductName, 
Row_Number() over(Partition By CATEID Order by productid Asc) RowID
From PRODUCT
) t WHERE t.RowID=1

--方法二:
SELECT CateID,ProductID,ProductName  FROM PRODUCT T
WHERE productID in (
    SELECT top 1 productID  FROM PRODUCT 
    WHERE cateid=T.cateid order by cateID asc )

/*

CateID    ProductID    ProductName
1    1    PA
2    3    PC
3    2    PB
4    5    PE
*/
奖励园豆:5
邀月 | 高人七级 |园豆:25198 | 2013-10-28 21:57
其他回答(5)
0

这个好像不太容易,我先自己试试!

jerry-Tom | 园豆:4077 (老鸟四级) | 2013-10-28 16:16
0

选取ID最前面的一条

select * from product where id in(select min(id) from product group by categoryID)

选取ID最后面的一条

select * from product where id in(select max(id) from product group by categoryID)

happydaily | 园豆:581 (小虾三级) | 2013-10-28 16:53
0

问题实在描述的不清晰。。。

hpze2000 | 园豆:109 (初学一级) | 2013-10-28 16:54
0

分组查询group by ,条目数限制 limit 数目;

江边流客 | 园豆:5 (初学一级) | 2013-10-28 16:57
0

效率效率怎么样,方法二的效率好像不怎么样。一还没试过

秦始皇不抽烟 | 园豆:208 (菜鸟二级) | 2013-11-28 08:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册