欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql如何对某一个重复字段只取其第一个数据

程序员文章站 2022-03-09 21:53:27
最近需要写个存储过程对一些数据进行处理,需求类似于这样的:有一个张表(order)记录的是用户购买商品的数据,字段为用户id,用户购买商品的名称,购买时间,这样的话里面的用户id和商品名称肯定就会有重复数据,那么对重复的数据只需要取其第一条记录即可。那么这时候就可以对其使用下面的函数对数据进行分组排序ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)上面的函数表示根据COL1字段对数据进行分组,在分组内部再根据 COL2字段进行排序,而此函数计算的...

最近需要写个存储过程对一些数据进行处理,需求类似于这样的:
有一个张表(order)记录的是用户购买商品的数据,字段为用户id,用户购买商品的名称,购买时间,这样的话里面的用户id和商品名称肯定就会有重复数据,那么对重复的数据只需要取其第一条记录即可。
那么这时候就可以对其使用下面的函数对数据进行分组排序

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)

上面的函数表示根据COL1字段对数据进行分组,在分组内部再根据 COL2字段进行排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)。
其中,partition by 是指定按哪些字段进行分组,这些字段值相同的记录将在一起编号;order by则是指定在同一组中进行编号时是按照怎样的顺序。
比如:

select a.*  
from ( 
    select *, row_number() over (partition by [商品名称] order by [购买时间]) as partion_idx 
    from order_talbe
) a
where a.partion_idx = 1

上面的sql的意思就是查出order表里的所有数据,(然后对数据根据商品名称进行分类,并且组内根据购买时间进行排序)这个结果作为一个分类后排序的字段,然后再从上面的结果集中取数据,并且是分组组内为第一个的数据。
所以这里主要是使用了一个

ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)

对数据进行分组和组内的排序。希望能够帮助到同样有这个需求的同学。

我在自己工作和学习的过程中搜集整理了很多的学习资源和笔面试题,有兴趣的可以微信搜索关注【1024笔记】,后台回复关键字即可免费获取海量的编程相关的学习资源(电子书、视频、源码、完整项目、面试宝典),涵盖java、python、c、前端、人工智能、大数据、数据分析、笔面试题等等,有任何问题都可以后台留言交流讨论,希望能对你有帮助,大家一起学习进步,加油!
sql如何对某一个重复字段只取其第一个数据
sql如何对某一个重复字段只取其第一个数据

本文地址:https://blog.csdn.net/qq_41153943/article/details/108563284