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 

  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

 

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

 

posted @ 2020-09-27 11:24  就一个  阅读(820)  评论(0编辑  收藏  举报