SQL Server 开窗函数Over的使用(计算结存金额)

SQL 开窗函数排序详解 SQL五大开窗排序函数对比: ROW_NUMBER:强制连续唯一序号(1,2,3),适用于分页去重 RANK:相同值同排名且跳号(1,1,3),适合竞赛排名 DENSE_RANK:相同值同排名不跳号(1,1,2),适合等级评定 NTILE:强制分n组,用于分位数分析 PERCENT_RANK:计算百分比排名(0-1) 典型应用场景: 分页查询用ROW_NUMBER 竞赛排名用RANK 等级划分用DENSE_RANK 分组分析用NTILE 百分位计算用PERCENT_RANK 各函数通过OVER子句指定排序规 阅读详情

SQL Server 开窗函数Over的使用(计算结存金额)

假设我们有一组数据,包含四列(币种,交易日期,收入金额,支出金额)

Select * From
(Values
('CNY','2022-01-01',100,50),
('CNY','2022-01-02',200,50),
('CNY','2022-01-03',300,100),
('CNY','2022-01-04',400,50),
('CNY','2022-01-05',500,60),
('CNY','2022-01-06',1000,500),
('CNY','2022-01-07',600,300),
('CNY','2022-01-08',800,400),
('CNY','2022-01-09',100,50),
('CNY','2022-01-10',0,500),
('USD','2022-01-01',100,50),
('USD','2022-01-02',200,50),
('USD','2022-01-03',300,100),
('USD','2022-01-04',400,500),
('USD','2022-01-05',500,60),
('USD','2022-01-06',400,500),
('USD','2022-01-07',600,300),
('USD','2022-01-08',800,400),
('USD','2022-01-09',100,50),
('USD','2022-01-10',10,500)
) 
TempTable(Currency,TradeDate,InValue,OutValue)

数据内容如下图

在这里插入图片描述
我们如何计算每个币种在每个交易日的结存金额呢?在不使用Over开窗函数的情况下,我们需要编写一个计算余额的函数GetBalance(@Currency char(3),TradeDate Date)来每日实现余额的计算,这里我们就不继续写函数的具体实现了。下面我们看看如何使用Over开窗函数实现余额计算功能。

Select Currency,TradeDate,InValue,OutValue
,Sum(InValue-OutValue) Over(Partition By Currency Order By TradeDate ASC Rows Unbounded Preceding) BalanceValue
From
(Values
('CNY','2022-01-01',100,50),
('CNY','2022-01-02',200,50),
('CNY','2022-01-03',300,100),
('CNY','2022-01-04',400,50),
('CNY','2022-01-05',500,60),
('CNY','2022-01-06',1000,500),
('CNY','2022-01-07',600,300),
('CNY','2022-01-08',800,400),
('CNY','2022-01-09',100,50),
('CNY','2022-01-10',0,500),
('USD','2022-01-01',100,50),
('USD','2022-01-02',200,50),
('USD','2022-01-03',300,100),
('USD','2022-01-04',400,500),
('USD','2022-01-05',500,60),
('USD','2022-01-06',400,500),
('USD','2022-01-07',600,300),
('USD','2022-01-08',800,400),
('USD','2022-01-09',100,50),
('USD','2022-01-10',10,500)
) 
TempTable(Currency,TradeDate,InValue,OutValue)
Order  By Currency,TradeDate

我们来看一下执行结果
在这里插入图片描述
是不是很简单,只是增加了一个计算列。

Sum(InValue-OutValue) Over(Partition By Currency Order By TradeDate Rows Unbounded Preceding) BalanceValue

我们使用Over开窗函数和结合Top关键字可以方便的获得累计销售额、销售额排名前几位的销售商品等等分析数据。

【Sql Server】pivot行转列,使用多个聚合函数 PIVOT函数的使用 阅读详情

相关推荐

Hive零基础从入门到实战 进阶篇(十五) HiveQL:开窗函数(累计统计)

目录 前言 1. 什么是开窗函数 2. 开窗函数语法 3. 开窗函数分类 4. 组内累计统计开窗函数 4.1 累计求和 sum(xx) over 4.2 累计求平均值 avg(xx) over 4.3 累计求最大值 max(xx) over 4.4 累计求最小值 min(xx) over 前言 从本文开始介绍Hive中开窗函数系列。这类函数叫法很多,包括分析函数、...

风影楼的博客 1733

SQL 窗口函数应用

首先使用窗口函数在分组并在组内排序 select origin_data_type ,valid_count, dense_rank() over (partition by origin_data_type order by valid_count ) as ranks from base_etl_record ber 然后对排序结果ranks进行筛选 select * from ( select origin_data_type ,valid_count, dense_rank() ov

CHERISHGF的博客 681

sql笔记:SQL SERVER金额转成大写金额(标量值函数创建、标量值函数调用)

笔记:SQL SERVER金额转成大写金额(标量值函数创建、标量值函数调用)

悠闲饭团的博客 1027

SQL Server OVER函数

从查询结果可以看到,我们成功地计算出了每个学生在每个学科中的排名和平均分数。这个查询将会按照学科对结果集进行分区,并在每个分区内按照分数从高到低排序,然后为每个学生在其所在的学科中计算排名和平均分。RANK():为每个分组内的行分配一个排名,相同值的行具有相同的排名,并跳过下一个排名。DENSE_RANK():为每个分组内的行分配一个连续的排名,相同值的行具有相同的排名。ROW_NUMBER():为查询结果集中的每一行赋予一个唯一的整数值,用于比较和排序。SUM():计算每个分组内指定列的总和。

JavaDaBaiCai的博客 2123

sql server如何利用开窗函数over()进行分组统计

主要介绍了sql server利用开窗函数over()进行分组统计的相关资料,需要的朋友可以参考下

51单片机IAP在线升级

51单片机IAP在线升级 爱矽半导体E85F3325单片机IAP在线升级教程,此处可查看更新及demo下载 文章目录前言一、ROM资源二、KEIL有关知识1.BL51连接器:2.LX51连接器:三、Keil其他相关项说明:四、MCU启动文件说明:五、例程BOOTLOADER使用说明六、例程使用可更改说明:七、程序使用通信方式:XMODEM八、APP程序说明九、APP代码升级说明十、代码合并烧写 前言 扩展-IAP 主要用于产品出厂后应用程序的更新作用 ,类似于其他引导装载升级程序的方法,在系统中必须始终

qq_42415953的博客 6666

关于计算每天月累计的SQL语句的写法---开窗函数(窗口函数)的应用

关于计算当年每个月年累计的SQL语句的写法 例如有一个表的值为 month value 202001 6 202002 10 202003 9 202004 11 我想获得的结果为 month value 202001 6 202002 16 202003 25 202004 36 select TMP1.month,sum(TMP2.VALUES) from TKDW.TABLE1 TMP1, TKDW.TABLE1 TMP2 where TMP1.month>=TMP2.month--计算当

qq_32389231的博客 5792

【脑电分析系列】第15篇:脑电功能连接性与脑网络分析(二):Granger因果性、图论指标与复杂网络构建

摘要: 本文深入探讨了脑电(EEG)分析中的高阶连接性方法——有效连接(Effective Connectivity),重点介绍了Granger因果性(Granger Causality, GC)的原理与应用。GC通过统计预测揭示脑区间信息流动方向,超越了传统功能连接的同步性分析。文章还结合图论指标(如度、路径长度、聚类系数和模块化)量化脑网络的拓扑结构,并通过Python代码(MNE和NetworkX库)演示了从EEG数据构建、分析复杂脑网络的完整流程。该研究为理解大脑动态互动、认知任务信息流及神经系统疾

qq_32516809的博客 1559

Sql server 开窗函数over()的语法

over用法一:与函数结合用,给结果进行排序编号,如图:用法二:跟聚合函数一起使用,利用over子句的分组效率比group by子句的效率更高。在Northwind数据库的订单表Orders中查询"订单id",“客户id”,“运费”,“所有订单的总数”,“每一个客户的总运费”,“所有客户的总运费”,“每一个客户的平均运费”,“所有客户的平均运费”,“每一个客户所有订单中最大的运费”,“所有客户中最大运费”,“每一个客户所有订单中最小的运费”,“所有客户中最小运费”,如下图:总结:运用开窗函数。

极客神殿 4908

在Windows 11上用VirtualBox搞定WRF-Hydro 5.2.0:一个水文模型小白的Ubuntu 22.04虚拟机避坑实录

本文详细记录了在Windows 11上使用VirtualBox和Ubuntu 22.04虚拟机成功编译安装WRF-Hydro 5.2.0水文模型的全过程。从虚拟环境配置、依赖库安装到环境变量设置,作者分享了针对Linux新手的实用避坑技巧和关键命令,帮助科研人员高效完成水文模型的环境搭建。

weixin_30733003的博客 352

基恩士数字光纤放大器

在2路输出类型上此为通道开关,并未配备0路类型;设置已搞不清楚不知道怎么办时···完成初始化后,模块重新显示当前值。①无工件时短按[SET]①有工件时短按[SET]各部位的名称和基本操作。可以手动微调设置值。

大小曲奇的博客 1万+

mysql开窗函数_打开天窗说亮话,SQL开窗函数,就是这么任性

经常写SQL脚本的朋友,通常会有一种迷之自信,似乎各种问题都有自己的一套解决方案。时间长了,人的思维可能会逐渐固化。思维固化能提高工作效率,但从某些角度看是很可怕的,我们也同时会失去接受新知识的内在动力。从一个简单问题开始,数据库SQL应用最简单的是什么?很多朋友会脱口而出:当然是查询啦,select * from 表,多简单啊。如果我再问您,SQL最难搞的是什么?您可能会陷入沉思,一幕幕曾经的彻...

weixin_39953578的博客 2413

国产谷歌地球,地形分析秒杀同款地图软件

咱们做地质、林业、水文、水利、电力、GIS、地图、水保、环境的,需要经常用到各种数据,比如影像、地形、矢量、模型等,但目前80%的规划大数据展示都离不开ArcGIS,令人头大的是很多朋友连ArcGIS软件安装起来都费劲。。。 那不会ArcGIS又装不了Google Earth怎么开展工作? 今天推荐大家一款国产免费专业地图浏览下载测量分析神器—图新地球 图新地球,国产三维gis软件。可以查看高清卫星影像地形以及其他很多常用电子地图,对地图需求的掌握远胜过Google Maps,而且上手比国外软件要简单

GISWorld3D的博客 3685

SQL server sum() over 累加注意问题

sum over

极客神殿 4671

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 122

芒果YOLO11改进145:Loss损失函数KLD:即插即用 NeurIPS顶会论文,独家首发原创新颖|通过 Kullback-Leibler 散度学习用于目标检测的高精度边界框

旋转检测Loss损失函数KLD:即插即用 NeurIPS顶会论文,独家首发原创新颖|通过 Kullback-Leibler 散度学习用于目标检测的高精度边界框

包括YOLOv5、YOLOv7、YOLOv8等模型改进 565

SQL-开窗函数计算复购指标统计案例

复购指标计算: 1、除用户是否归属复购外,复购指标统计,如金额、营收等 2、不同复购周期的计算,7天,30天,60天,90天等等 3、动态复购,用户每天起始往后的复购详情,又同归因

liuya19921123的博客 1788

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mysqlover开窗函数

这句select row_number() over (order by ProductID asc) as RowIndex, 不明白 呵呵~老实说,要是不是看了你的提问,我还真不知道有这么个东西呢~ ROW_NUMBER()是一个系统函数,可以生成一组自然编号之类的东西,而OVER只在这里配合使用,表示按Produ...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 274

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SQL Server中OVER子句深度解析:窗口函数实战与性能优化

OVER子句是SQL Server高级查询的瑞士军刀,掌握其灵活用法可大幅提升数据处理能力。建议:在开发环境使用分析查询开销优先使用ROWS而非RANGE(性能更优)定期检查执行计划中的Sort/Windowing算子。

xiaoyu❅的博客 1740

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SQL Server 开窗函数 Over()代替游标的使用详解

前言: 今天在优化工作中遇到的sql慢的问题,发现以前用了挺多游标来处理数据,这样就导致在数据量多的情况下,需要一行一行去遍历从而计算需要的数据,这样处理的结果就是数据慢,容易卡死。 语法介绍: 1、与Row_Number() 函数结合使用,对结果进行排序,这个是我们使用的非常多的    2、与聚合函数结合使用,利用over子句的分组和排序,对需要的数据进行操作 例如:SUM() Over() 累加值、AVG() Over() 平均数 MAX() Over() 最大值、MIN() Over()

558

SQL ServerOVER 子句,over开窗函数,SQL SERVER 开窗函数

https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx http://www.cnblogs.com/85538649/archive/2011/08/13/2137370.html http://blog.youkuaiyun.com/liu_1983/article/details/7269312 在SQL SER...

weixin_33800463的博客 339

SQL SERVER:开窗函数 SUM() OVER() 数据统计中一例使用

由于前一段时间胃痛,导致博客园博客都停更了一个月左右。近几天,胃病终于稍微有所好转,决定重新写博文。 前几天,有个朋友刚好问到本人有关 SQL 语句,大致是原表有两列,分别为月份、月份销售额,而需要一条 SQL 语句实现统计出每个月份以及当前月以前月份销售额和。尼玛,感觉还是没有说清,下面用图表示。 ...

weixin_30596735的博客 1883

oracle 开窗函数练习题_魔幻的SQL开窗函数,为您打开进阶高手的一扇天窗

经常写SQL脚本的朋友,通常会有一种迷之自信,似乎各种问题都有自己的一套解决方案。时间长了,人的思维可能会逐渐固化。思维固化能提高工作效率,但从某些角度看是很可怕的,我们也同时会失去接受新知识的内在动力。从一个简单问题开始,数据库SQL应用最简单的是什么?很多朋友会脱口而出:当然是查询啦,select * from 表,多简单啊。如果我再问您,SQL最难搞的是什么?您可能会陷入沉思,一幕幕曾经的彻...

weixin_32631179的博客 355

mysql金额数字转成中文_SQL Server中文大写金额转化函数

为了能够在报告中直接输入大写金额,本人编写了这个SQL Server的函数. 复制以下代码到SQL Server 查询分析器中运行,生成自定义函数 usf_ChineseCost. 在查询语句中调用该函数就可以输出大写的金额了。 SQL Server 中文金额 大写金额 CREATE FUNCTION usf_Ch为了能够在报告中直接输入大写金额,本人编写了这个SQL Server的函数. 复制以...

weixin_31714129的博客 926
上一篇: SQL Server透视表(PIVOT语法的使用)
下一篇: SQL Server逆透视表(UNPIVOT语法的使用)
wangbin1008
博客等级 码龄22年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值