SQL Server笔记 -- 第46章 窗口函数

第46.1节 中心移动平均

计算价格6个月(126个工作日)中心移动平均:

sql 复制代码
SELECT
    TradeDate,
    AVG(Px) OVER (
        ORDER BY TradeDate
        ROWS BETWEEN 63 PRECEDING AND 63 FOLLOWING
    ) AS PxMovingAverage
FROM HistoricalPrices;
  • 由于每行需取前后最多63行,在开始与结束处无法完全居中。

第46.2节 查找时间戳列表中最新的一条记录

在记录事件的表中,常需找出最新一条事件。因时间戳可能重复,使用 row_number() over (order by ...) 保证唯一排序,再取 rn = 1

sql 复制代码
SELECT *
FROM (
    SELECT *,
           row_number() OVER (ORDER BY crdate DESC) AS my_ranking
    FROM sys.sysobjects
) g
WHERE my_ranking = 1;
  • 同样方法可用于任何可能出现重复排序列的数据集。

第46.3节 最近30条记录的移动平均

计算最近30条销售记录的移动平均:

sql 复制代码
SELECT
    value_column1,
    (
        SELECT AVG(value_column1) AS moving_average
        FROM Table1 T2
        WHERE (
            SELECT COUNT(*)
            FROM Table1 T3
            WHERE date_column1 BETWEEN T2.date_column1 AND T1.date_column1
        ) BETWEEN 1 AND 30
    ) AS MovingAvg
FROM Table1 T1;
  • 子查询按日期顺序统计行号,仅保留最近30行计算平均。
相关推荐
雾岛听蓝40 分钟前
Qt操作指南:状态栏、浮动窗口与对话框使用
开发语言·经验分享·笔记·qt
weixin_5689960644 分钟前
如何用 IndexedDB 存储从 API 获取的超大列表并实现二级索引
jvm·数据库·python
APIshop1 小时前
小红书笔记视频详情接口深度解析:smallredbook.item_get_video_pro
数据库·笔记·音视频
空中海1 小时前
Redis 从零到精通:9大数据结构 × 11个高频工程实战场景完全手册
数据结构·数据库·redis
qiuyunoqy1 小时前
MySQL - 2
数据库·mysql
y = xⁿ1 小时前
MySQL学习笔记:乐观锁VS悲观锁/八股总结
笔记·学习·mysql
2301_775148151 小时前
如何授权AWR报告生成_GRANT SELECT ANY DICTIONARY诊断权限
jvm·数据库·python
GISer_Jing1 小时前
《Claude Code Hooks:AI编程工具的高级控制指南》
前端·人工智能·microsoft·ai编程
空中海1 小时前
Redis 专家实战:生产架构设计 × 容量规划 × 安全治理 × 37道高频面试题全解
数据库·redis·安全
d111111111d1 小时前
STM32-UART抽象层封装
笔记·stm32·单片机·嵌入式硬件·学习