ROW_NUMBER( )取最新一笔数据 用法解析

得到 ROW_NUMBER() 函数使用详解

 row_number() over(partition by 字段1 order by 字段2 )按over里的partition by 字段1进行分组,然后按Over里的order by字段2进行组内排序,每组从1开始
这里partition by 分组与group by不同在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录

实例如下:

需求场景(取最新的结果信息):检验日期 ,工序,工单,规格型号 ,抽检数量,不良数量,  抽检结果

正常情况下:

select 检验日期 ,工序,工单,规格型号 ,SUM(抽检数量),SUM(不良数量),  抽检结果 from dual 
			group by 
			检验日期 ,工序,工单,规格型号 ,抽检结果

 得到的结果是:每个工序,工单,规格型号汇总出来的数量 对应多个检验结果

 使用ROW_NUMBER()的情况下:

--  取最新一笔的备注信息
WITH NEW_MSG(工序,工单,规格型号,结果 ) AS (
			SELECT 工序,工单,规格型号,结果  FROM (
				SELECT 
					工序
					,工单
					,规格型号
					,结果 
					,row_number() OVER ( PARTITION BY 工序,工单,规格型号 order by 检验日期 desc)  AS row 
				FROM A  
			)WHERE row=1
		) 
	SELECT 
			A.检验日期
			,A.工序
			,A.工单
			,A.规格型号
			,msg.结果 
			,sum(抽检数量)
			,sum(不良数量)
FROM A.  
LEFT JOIN NEW_MSG msg ON msg.工序 = A.工序 
	AND  msg.工单 = A.工单 
	AND msg.规格型号 = A.规格型号  
group by 
			A.检验日期
			,A.工序
			,A.工单
			,A.规格型号
			,msg.结果 

得到的结果是:每个工序,工单,规格型号 ,对应最新检验结果 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
row_number() over函数的作用是为结果集中的每一行分配一个唯一的行号。它可以用于排序、分组和筛选数据。 重复数据是指在某一列或多列中存在相同的值的数据。使用row_number() over函数可以识别重复数据,并为每个重复的数据行分配不同的行号。例如,可以使用以下语句来获每个域名的top url,并使用row_number() over函数为其分配行号: select domain, url, row_number() over(partition by domain order by url) as rn from tablename 这将为每个域名的url分配不同的行号,以便更好地识别和处理重复数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [利用ROW_NUMBER() OVER函数给SQL数据库中每一条记录分配行号的方法](https://download.csdn.net/download/weixin_38643269/13693628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SQL Server中row_number函数的常见用法示例详解](https://download.csdn.net/download/weixin_38551205/13682709)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [数据倾斜:row_number over优化(top数据倾斜)](https://blog.csdn.net/u013668852/article/details/116295392)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值