当前位置: 首页 > 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 中的用法!

相关文章:

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

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

机器学习-高斯混合模型

文章目录 高斯混合模型对无标签的数据集:使用高斯混合模型进行聚类对有标签的数据集:使用高斯混合模型进行分类总结 高斯混合模型 对无标签的数据集:使用高斯混合模型进行聚类 对有标签的数据集:使用高斯混合模型进行分类 总结...

微信V3支付报错 平台证书及平台证书序列号

1.平台证书及平台证书序列号设置错误报错: 错误1: Verify the response’s data with: timestamp1735184656, noncea5806b8cabc923299f8db1a174f3a4d0, signatureFZ5FgD/jtt4J99GKssKWKA/0buBSOAbWcu6H52l2UqqaJKvrsNxvodB569ZFz5G3fbassOQcSh5BFq6hvE…...

41.欠采样技术下变频不能用与跨两个nyquist的情况下

当接收到的信号位于同一nyquist区间时,信号被成功的折叠到了第一Nyquist区间中。 当接收信号位于两个或多个采样区间时,最后多个区间的信号都会被折叠到第一Nyquist区间中造成信号的重叠。...

20241227通过配置nomodeset参数解决更新grub之后,ubuntu20.04.5无法启动的问题

20241227通过配置nomodeset参数解决更新grub之后,ubuntu20.04.5无法启动的问题 2024/12/27 17:34 0.397475]pci0000:00:07.0:DPC:RPPI0 l0gsize 0 is invalid dev/nvmeon1p9:clean,251849/4276224 files,3266309/17089792 blocks 缘起:公司电脑要安装加密…...

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期,GitLab Inc. 针对其 SaaS 产品做了限制,如果被判定为国内用户,则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品(GitLab.com)迁移到极狐GitL…...

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述:2 Data Parallelism 数据并行(Data Parallelism)的核心在于将模型的数据处理过程并行化。具体来说,面对大规模数据批次时,将其拆分为较小的子批次,并在多个计算设备上同时进行处…...

Python大数据可视化:基于Python对B站热门视频的数据分析与研究_flask+hive+spider

开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 管理员功能界面 排行榜界面 系统管理界面 看板展示 摘要 本项目以对B站热…...

利用 Python 编写一个 VIP 音乐下载脚本

在这篇博客中,我们将介绍如何使用 Python 编写一个简单的 VIP 音乐下载脚本,利用网页爬虫技术从一个音乐网站下载歌曲。通过解析网页,获取歌曲的真实下载链接,并将音乐文件保存到本地。我们将使用 requests 和 BeautifulSoup 库来实现这个过程。 目标 本脚本的主要功能是…...

linux内核如何实现TCP的?

TCP(传输控制协议)是网络通信中的核心协议之一,实现了可靠的、面向连接的、基于字节流的通信。在Linux内核中,TCP的实现相对复杂,涉及多个模块和层次。以下是一些关键概念和机制: 1. 协议栈 Linux 内核中的网络协议栈(Network Stack)是分层设计的,包括链路层、网络层…...

【Spring】基于XML的Spring容器配置——FactoryBean的使用

随着Spring框架应用程序的复杂性增加,开发者需要更加灵活和强大的工具来创建和管理Bean。FactoryBean是Spring提供的一种强大机制,它允许开发者自定义Bean的创建过程。这种机制不仅提高了Bean的创建灵活性,还可以简化复杂对象的构建过程。 在…...

Docker使用——国内Docker的安装办法

文章目录 参考资料前言Mac安装办法Homebrew 安装1. 直接下报错2. 安装homebrew, 用国内镜像3. 安装Docker4. 启动docker服务5. 测试是否安装成功 参考资料 鸣谢大佬文章。 macOS系统中:Docker的安装:https://blog.csdn.net/sulia1234567890…...

电商会员门店消费数据分析

导包 import os import sqlite3 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from IPython.display import display_htmlpd.set_option(max_colwidth,200)%matplotlib inline前期准备 转义路径 # 获取Windows系统下的路…...

Vue.js 入门与进阶:打造高效的前端开发体验

Vue.js 是一款渐进式的 JavaScript 框架,凭借其轻量、易用、灵活的特点,已经成为了前端开发者的首选之一。从简单的交互到复杂的单页应用(SPA),Vue 为开发者提供了一套高效且易于上手的工具。在本文中,我们…...

Java包装类型的缓存

Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。 Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or Fal…...

【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块

目录 一、脉冲模块 (1)资源介绍 🔅原理图 🔅采集原理 (2)STM32CubeMX 软件配置 (3)代码编写 (4)实验现象 二、脉冲模块接口函数封装 三、踩坑日记 &a…...

.NET平台用C#通过字节流动态操作Excel文件

在.NET开发中,通过字节流动态操作Excel文件提供了一种高效且灵活的方式处理数据。这种方法允许开发者直接在内存中创建、修改和保存Excel文档,无需依赖直接的文件储存、读取操作,从而提高了程序的性能和安全性。使用流技术处理Excel不仅简化了…...

SpringMVC详解

文章目录 1 什么是MVC 1.1 MVC设计思想1.2 Spring MVC 2 SpringMVC快速入门3 SpringMVC处理请求 3.1 请求分类及处理方式 3.1.1 静态请求3.1.2 动态请求 3.2 处理静态请求 3.2.1 处理html文件请求3.2.2 处理图片等请求 3.3 处理动态请求 3.3.1 注解说明3.3.2 示例 3.4 常见问题…...

springboot、spring、springmvc有哪些注解

Spring Boot 常用注解 虽然Spring Boot本身并没有引入大量新的注解,但它基于Spring框架,并整合了多种技术和库,使得开发者可以更方便地使用Spring框架的功能。在Spring Boot项目中,常用的注解主要来自于Spring框架本身。 ‌Sprin…...

Apache Commons ThreadUtils 的使用与优化

Apache Commons ThreadUtils 的使用与优化 1. 问题背景 在 Java 系统中,跨系统接口调用通常需要高并发支持,尤其是线程池的合理配置至关重要。如果线程池使用不当,可能导致性能下降,线程等待或过载。 当前问题 使用了 Apache …...

MentorBit红外驱动库:裸机与RTOS下的精准时序控制

1. MentorBit-DetectorIR 库概述MentorBit-DetectorIR 是一款专为 MentorBit 红外发射/接收模块设计的嵌入式底层驱动库,其核心定位并非通用红外协议栈(如 NEC、RC5 解码),而是面向硬件验证、模块级功能测试与快速原型开发的轻量级…...

Azure IoT Hub AMQP传输层深度解析与嵌入式实践

1. Azure IoT Hub AMQP 传输层技术深度解析Azure IoT Hub 是微软面向物联网场景构建的高可靠、可扩展云平台,其核心能力依赖于多种协议栈的协同支持。在众多通信协议中,AMQP(Advanced Message Queuing Protocol)因其固有的消息可靠…...

002、游戏画面捕获与预处理:屏幕抓取、图像增强与目标区域锁定

# ## 一、深夜调试:为什么我的YOLO总是漏掉BOSS? 上周三凌晨两点,我盯着屏幕上的暗黑风格游戏画面,第37次跑通了训练好的YOLOv5模型。结果让人沮丧——在快速移动的战斗场景中,模型对BOSS的识别率不到60%。不是模型不行,而是喂给模型的图像质量太差:屏幕截图模糊、颜色…...

ARCMAP实战:3分钟搞定面数据200米内点筛选(附反向选择技巧)

ARCMAP空间筛选实战:200米范围点数据高效提取与反向选择技巧 在地理信息系统(GIS)日常工作中,空间数据筛选是最基础却最频繁的操作之一。许多初学者面对"筛选某面要素200米范围内的点数据"这类需求时,往往会…...

解决Python文件路径超长问题:Windows系统下的终极指南

解决Python文件路径超长问题:Windows系统下的终极指南 在Windows平台上开发Python应用时,文件路径长度限制是个令人头疼的"历史遗留问题"。记得第一次接手一个大型Python项目时,我花了整整两天时间才搞明白为什么某些文件总是无法读…...

FanControl深度指南:智能散热系统的架构解析与实战优化

FanControl深度指南:智能散热系统的架构解析与实战优化 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

Acetic Acid-PEG-OPSS,分子链两端分别带有吡啶基二硫化物和乙酸基团

一.名称英文名称:AA-PEG-OPSS,Acetic Acid-PEG-OPSS,OPSS-PEG-AA,OPSS-PEG-Acetic Acid中文名称:乙酸聚乙二醇二巯基吡啶,乙酸PEG二巯基吡啶分子量:1k,2k,3.4k&#xff0…...

别再傻傻分不清!ComfyUI里Load Checkpoint和Load Diffusion Model到底怎么选?附实战场景对比

ComfyUI模型加载决策指南:Checkpoint与Diffusion Model的实战选择逻辑 第一次打开ComfyUI工作流时,面对"Load Checkpoint"和"Load Diffusion Model"两个相似的紫色节点,大多数新手都会愣住——它们看起来都能加载模型&am…...

不止于上传预览:在若依框架中构建一个轻量级企业文档管理模块

若依框架下的企业级文档中心设计与实战 在数字化转型浪潮中,企业文档管理正从简单的文件存储向智能化协作平台演进。基于若依微服务框架构建文档中心模块,不仅能满足基础的PDF上传预览需求,更能为企业提供版本控制、权限管理、全文检索等进阶…...

10个高效技巧解决RVC变声器常见故障

10个高效技巧解决RVC变声器常见故障 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI Retrieval-bas…...