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

sql over()函数使用

起因

最近我在推送数据到中间库时,由于源表比较大,所以采用了基于主键ID的分批推送,于是就有了如下脚本:

-- 第一步,推送数据
insert into Interconnect..Steps
SELECT TOP (@batch_size) StepID, {其他业务字段}
FROM Steps
WHERE StepID > @last_id
ORDER BY StepID-- 第二步,查询并赋值最新的last_id
SELECT @last_id = MAX(StepID) FROM (SELECT TOP (@batch_size) StepIDFROM StepsWHERE StepID > @last_idORDER BY StepID
) t;

但这存在一个效能问题,我需要查询两次Steps表,才能完成推送与更新last_id的需求。那么有没有办法一次查询就把两件事给办了?

over()窗口函数

核心作用:在保持原始行不变的前提下,为每一行添加基于某个数据范围的聚合或分析结果。

对于上面这种情况,我可以在查询中添加一列max(StepID) over() as Last_ID,就可以基于整个结果集计算出最大的StepID。
不过对于这个例子,因为窗口函数是基于全表数据进行聚合的,所以真正使用时还需要嵌套子表,以保证是基于当前@batch_size结果集得出的last_id

SELECT StepID, {业务字段},MAX(StepID) OVER() AS LAST_ID
FROM (SELECT TOP (@batch_size) StepID, {业务字段}FROM StepsWHERE StepID > @last_idORDER BY StepID
) AS subquery;

如果over()参数不为空,则会呈现如下差异:

-- 按 processID 分组的最大值(每行显示所属process的最大stepID)
MAX(stepID) OVER(PARTITION BY processID)

总结

over()函数的特点:

  1. 保持数据粒度 - 不改变原始行数
  2. 提供上下文 - 每行数据都了解整体情况
  3. 提升性能 - 比子查询更高效
  4. 增强分析能力 - 支持复杂的数据分析场景
http://www.hskmm.com/?act=detail&tid=15545

相关文章:

  • Git回退版本 reset、revert、read-tree、restore
  • Avalonia 背景颜色Transparent在用户界面设计中对悬浮效果影响的总结
  • 飞书 燕千云焕新上线,飞书用户即刻试用ITSM工具
  • 如果使用微软 Azure 托管的 OpenAI 服务
  • Python类
  • 什么是文件外发审批?主要有哪几种关键流程?
  • VPX处理板设计原理图:9-基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信号处理卡 C6678板卡, XC7VX690T板卡, VPX处理板
  • VitePress 添加友链界面
  • 跨网文件摆渡软件:企业数据安全高效传输的关键解决方案!
  • 洛谷题单指南-进阶数论-P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
  • 第十四届蓝桥杯青少组C++选拔赛[2022.12.18]第二部分编程题(4、充电站) - 指南
  • c语言之自定义memcpy
  • 国产芯片处理板卡:7-基于国产化FT-M6678+JFM7K325T的6U CPCI信号处理卡
  • 一文详解纷享销客CRM Agent平台3大核心能力(附应用场景与案例)
  • QOJ #5076. Prof. Pang and Ants 题解
  • 发现5个宝藏文件摆渡系统 2025年企业首选的摆渡方案是这个!
  • 漏洞挖掘实战:如何定制化模糊测试技术
  • nuxt3中使用pdfjs-dist实现pdf转换canvas实现浏览
  • 查看linux部署网站的TLS版本号
  • 【SpringBoot- Spring】学习
  • 基于Python+Vue开发的摄影网上预约管理系统源码+运行步骤
  • 【习题答案】《深入理解计算机系统(原书第三版)》
  • 深入解析:mosquitto求医之路(3):Docker安装也不好使
  • 在K8S中,在服务上线的时候Pod起不来怎么进行排查?
  • 在线教育软件开发的全流程解析与优化方案
  • 在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
  • 在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
  • 上海应用大学网课自动化学习脚本(基于Python selenium)代码重构为GUI界面 —— 技术笔记
  • 在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?
  • 开源语音识别FunASR入门详解