当前位置: 首页 > news >正文

SQL Server中FIRST_VALUE和 LAST_VALUE窗口函数允许在一个指定的窗口内返回第一个或最后一个值

在 SQL Server 中,FIRST_VALUELAST_VALUE 是用于窗口函数(Window Functions)的两个非常有用的函数。它们允许你在一个指定的窗口内返回第一个或最后一个值。这两个函数通常与 OVER 子句一起使用,以定义窗口的范围和排序规则。

语法

FIRST_VALUE

FIRST_VALUE (scalar_expression) OVER ([PARTITION BY partition_expression, ...] ORDER BY sort_expression [ASC | DESC], ...)

LAST_VALUE

LAST_VALUE (scalar_expression) OVER ([PARTITION BY partition_expression, ...] ORDER BY sort_expression [ASC | DESC], ...)

参数

  • scalar_expression:你想要获取第一个或最后一个值的表达式。
  • PARTITION BY(可选):用于将结果集划分为分区,每个分区独立计算 FIRST_VALUELAST_VALUE
  • ORDER BY:定义窗口内行的排序顺序,这对于确定哪个值是第一个或最后一个至关重要。

示例

假设有一个名为 Sales 的表,其中包含以下数据:

CREATE TABLE Sales (SaleID INT,SaleDate DATE,Amount DECIMAL(10, 2)
);INSERT INTO Sales (SaleID, SaleDate, Amount) VALUES
(1, '2023-01-01', 100.00),
(2, '2023-01-02', 150.00),
(3, '2023-01-03', 200.00),
(4, '2023-01-04', 250.00),
(5, '2023-01-05', 300.00);

使用 FIRST_VALUE

下面的查询将返回每个销售记录的日期,以及按销售日期排序后的第一个销售金额:

SELECTSaleID,SaleDate,Amount,FIRST_VALUE(Amount) OVER (ORDER BY SaleDate ASC) AS FirstAmount
FROMSales;

结果:

SaleID | SaleDate  | Amount | FirstAmount
-------|-----------|--------|------------
1      | 2023-01-01| 100.00 | 100.00
2      | 2023-01-02| 150.00 | 100.00
3      | 2023-01-03| 200.00 | 100.00
4      | 2023-01-04| 250.00 | 100.00
5      | 2023-01-05| 300.00 | 100.00

使用 LAST_VALUE

下面的查询将返回每个销售记录的日期,以及按销售日期排序后的最后一个销售金额:

SELECTSaleID,SaleDate,Amount,LAST_VALUE(Amount) OVER (ORDER BY SaleDate ASC) AS LastAmount
FROMSales;

结果:

SaleID | SaleDate  | Amount | LastAmount
-------|-----------|--------|-----------
1      | 2023-01-01| 100.00 | 300.00
2      | 2023-01-02| 150.00 | 300.00
3      | 2023-01-03| 200.00 | 300.00
4      | 2023-01-04| 250.00 | 300.00
5      | 2023-01-05| 300.00 | 300.00

分区(Partitioning)

你也可以使用 PARTITION BY 子句来将数据划分为多个分区,每个分区独立计算 FIRST_VALUELAST_VALUE。例如,假设 Sales 表中有一个 Region 列,你可以按区域分区:

-- 假设 Sales 表中有 Region 列
-- ALTER TABLE Sales ADD Region NVARCHAR(50);
-- UPDATE Sales SET Region = 'North' WHERE SaleID IN (1, 2);
-- UPDATE Sales SET Region = 'South' WHERE SaleID IN (3, 4, 5);SELECTSaleID,Region,SaleDate,Amount,FIRST_VALUE(Amount) OVER (PARTITION BY Region ORDER BY SaleDate ASC) AS FirstAmountPerRegion,LAST_VALUE(Amount) OVER (PARTITION BY Region ORDER BY SaleDate ASC) AS LastAmountPerRegion
FROMSales;

这将为每个区域返回第一个和最后一个销售金额。

希望这些示例能帮助你理解 FIRST_VALUELAST_VALUE 在 SQL Server 中的用法!

http://www.lryc.cn/news/510643.html

相关文章:

  • 机器学习-高斯混合模型
  • 微信V3支付报错 平台证书及平台证书序列号
  • 41.欠采样技术下变频不能用与跨两个nyquist的情况下
  • 20241227通过配置nomodeset参数解决更新grub之后,ubuntu20.04.5无法启动的问题
  • 从 GitLab.com 到 JihuLab.com 的迁移指南
  • 深度学习中的并行策略概述:2 Data Parallelism
  • Python大数据可视化:基于Python对B站热门视频的数据分析与研究_flask+hive+spider
  • 利用 Python 编写一个 VIP 音乐下载脚本
  • linux内核如何实现TCP的?
  • 【Spring】基于XML的Spring容器配置——FactoryBean的使用
  • Docker使用——国内Docker的安装办法
  • 电商会员门店消费数据分析
  • Vue.js 入门与进阶:打造高效的前端开发体验
  • Java包装类型的缓存
  • 【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块
  • .NET平台用C#通过字节流动态操作Excel文件
  • SpringMVC详解
  • springboot、spring、springmvc有哪些注解
  • Apache Commons ThreadUtils 的使用与优化
  • 重温设计模式--5、职责链模式
  • 下午四点半
  • 嵌入式单片机中Flash存储器控制与实现
  • loki failed to flush
  • 微信小程序打印生产环境日志
  • 利用 deepin-IDE 的 AI 能力,我实现了文件加密扩展
  • JPA 基本查询(五)
  • hiprint结合vue2项目实现静默打印详细使用步骤
  • 项目报 OutOfMemoryError 、GC overhead limit exceeded 问题排查以及解决思路实战
  • 【计算机-显示屏灰阶测试】
  • CSS系列(40)-- Container Queries详解