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行计算平均。
相关推荐
FL4m3Y4n10 小时前
MySQL缓存策略
数据库·mysql·缓存
wsx_iot10 小时前
TDengine学习
数据库·学习·tdengine
不吃香菜的小趴菜10 小时前
mysql数据库打包与导入
数据库·mysql
野犬寒鸦10 小时前
Redis复习记录day1
服务器·开发语言·数据库·redis·缓存
njidf10 小时前
实战:用Python开发一个简单的区块链
jvm·数据库·python
Rick199310 小时前
慢SQL优化
数据库·python·sql
IvorySQL10 小时前
速抢!HOW 2026 早鸟票最后 1 天,解锁开源数据库盛会全亮点
数据库·postgresql·开源
IvorySQL10 小时前
PostgreSQL 技术日报 (3月30日)|内核补丁密集更新,REPACK 并发与索引预读取进展
数据库·postgresql·开源
nqqcat~10 小时前
shell入门
笔记
NineData10 小时前
从业务库到实时分析库,NineData构建MySQL到SelectDB同步链路
数据库·mysql·程序员