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行计算平均。
相关推荐
2603_965148115 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl5 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
bitbrowser5 小时前
giffgaff突然停用?先分清闲置停用和长期境外断开
笔记
九硕智慧建筑一体化厂家5 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
AI云海6 小时前
天幕红尘笔记
笔记
xfhuangfu6 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT6 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData7 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
梦想的旅途27 小时前
企业微信 API 二次开发:AI 智能体与外部群业务流闭环
人工智能·microsoft·企业微信
J_bean7 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交