SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)
1:数据库表结构:
(产品图片表)
select * from product_imgs
2:应用场景:
可见表中每一个产品(pro_id)可能对应多个图片(img),我想要按照添加时间的先后顺序,获得其中每一个产品的第一张图片
3:尝试使用 group by
select top 1 pro_id,img,create_time from product_imgs group by pro_id,img,create_time order by create_time
发现无法满足每一个产品的图片
4:使用Partition by
-
select * from (select pro_id,img,create_time, ROW_NUMBER() over(partition by pro_id order by create_time) as row_sort from product_imgs )
-
as t where t.row_sort=1
可以满足需求,所以Partition by可以理解为 对多行数据分组后排序取每个产品的第一行数据