SQLServer:ROW_NUMBER()窗口函数及实际应用

本文介绍了如何在SQLServer中利用ROW_NUMBER()窗口函数根据采购入库单明细查询商品的最新供应商信息,通过PARTITIONBY和ORDERBY子句实现按货号和开单日期的分区及降序排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应用场景

描述:根据"采购入库单明细"查询商品最近的供应商

"采购入库单明细":RKDZK

RKDZK:HH(货号)、TJBH(供应商编号)、KDRQ(开单日期)

思路:从"采购入库单明细"进行查询,需要从"采购入库单明细"中查询商品最近的开单日期,找到最近开单日期对应的商品供应商

--解释:下面SQL就是使用窗口函数,根据某个字段进行分区,再根据某个字段进行排序;
--首先,整体上会有一个排序,其次窗口函数会为每一行记录分配一个编号,
--如果使用ROW_NUMBER()函数,这个编号是不重复并且顺序的,即不会跳号
SELECT
	HH,TJBH
FROM
	(
	SELECT
	HH,TJBH,KDRQ,
	ROW_NUMBER() OVER (PARTITION BY HH ORDER BY KDRQ DESC) AS BS
	FROM RKDZK
	) A
WHERE A.BS = 1  

ROW_NUMBER()窗口函数

在 SQL Server 中,ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) 是一种常用的窗口函数语法,用于为每个分区内的行分配唯一的行号。PARTITION BY 子句用于指定分区的列,而 ORDER BY 子句用于指定排序的列或表达式

以下是 ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...) 的示例语法:

SELECT column1, column2, ...,
       ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2) AS row_num
FROM table_name

解释一下上述语法的各个部分:

  • SELECT column1, column2, ... 是选择要包含在结果集中的列。
  • ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2) 是 ROW_NUMBER() 窗口函数的使用方式
    • PARTITION BY column1 指定了用于分区的列,即根据哪些列进行分组。
    • ORDER BY column2 指定了在每个分区内对结果集进行排序的列或表达式。
    • ROW_NUMBER() 函数会为每个分区内的行分配一个唯一的整数值。
  • FROM table_name 是查询的数据来源表。

示例用法:

SELECT CustomerID, OrderID, OrderDate, 
ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY OrderDate) AS row_num
FROM Orders

这个示例查询了 "Orders" 表中的订单信息,并在每个客户的分区内按照订单日期进行排序,为每个分区内的行分配了一个唯一编号

补充:窗口函数-排序函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值