尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

sql over()函数使用

sql over()函数使用
📅 发布时间:2026/6/20 7:01:27

起因

最近我在推送数据到中间库时,由于源表比较大,所以采用了基于主键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. 增强分析能力 - 支持复杂的数据分析场景

相关新闻

  • 小柏实战学习Liunx(图文教程三十二)
  • VPX处理板设计原理图:9-基于DSP TMS320C6678+FPGA XC7V690T的6U VPX信号处理卡 C6678板卡, XC7VX690T板卡, VPX处理板
  • VitePress 添加友链界面

最新新闻

  • 2026年6月头部宠物皮肤科医院推荐,宠物眼科/猫咪体检/异宠/宠物皮肤/宠物骨科/猫咪绝育/宠物,宠物皮肤科专家找哪家 - 品牌推荐师
  • 深入解析MPC8360E/MPC8358E处理器接口电气特性与硬件设计实践
  • LLM嵌入技术在表格数据预测中的应用与实践
  • 渗透测试实战:CDN绕过与子域名爆破核心技术解析
  • 5个实用技巧:用FitGirl游戏启动器轻松管理你的压缩版游戏库
  • 沃尔玛成钓鱼攻击首选目标:高仿真品牌钓鱼的攻防解析与防范指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号