SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)

1:数据库表结构:

(产品图片表)

select * from product_imgs

SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)

 

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 

SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)

发现无法满足每一个产品的图片

4:使用Partition by 

  1.  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 ) 
  2. as t where t.row_sort=1

SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)

 

可以满足需求,所以Partition by可以理解为 对多行数据分组后排序取每个产品的第一行数据

 

SqlServer中 Partition By 的使用( 对多行数据分组后排序取每个产品的第一行数据)

上一篇:阿里巴巴工程师教你认识mysql慢查询


下一篇:第二章 关系数据库标准语言 SQL