You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在数据表中查询并展示上周对应的数据值?

按周查询上周对应数据值的SQL实现

需求说明

有一张按周存储数据的数据表Data,需要通过查询新增一列,展示每条记录对应的上周数据值。期望的查询语句格式如下:

Select Week, Value, PreviousWeek'svalue from Data 

期望查询结果示例:

WeekValuePrevious WeeksValue
Week111
Week21311
Week34613
Week41046
Week51510

解决方案

可以使用SQL的**窗口函数LAG()**来实现这个需求,该函数能获取当前行之前指定偏移量的行数据,适用于MySQL 8.0+、PostgreSQL、SQL Server等主流数据库。

具体查询语句

SELECT 
    Week,
    Value,
    LAG(Value, 1) OVER (ORDER BY Week) AS `Previous WeeksValue`
FROM Data;

语句解释

  • LAG(Value, 1):表示获取当前行的上一行(偏移量为1)的Value字段值,如果是第一行(如Week1),则返回NULL,对应结果中的空值。
  • OVER (ORDER BY Week):指定按照Week字段排序,确保LAG()能正确匹配到上周的数据(需保证Week字段的排序逻辑符合周顺序,比如Week1到Week5是递增的)。

如果你的数据库不支持窗口函数(比如MySQL 5.x版本),可以用自连接的方式实现:

SELECT 
    d1.Week,
    d1.Value,
    d2.Value AS `Previous WeeksValue`
FROM Data d1
LEFT JOIN Data d2 
    ON d2.Week = CONCAT('Week', CAST(SUBSTRING(d1.Week, 5) AS UNSIGNED) - 1);

这种方式通过解析Week字段的数字部分,匹配上一周的记录,适用于Week字段格式固定为"Week+数字"的场景。

内容的提问来源于stack exchange,提问作者bob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:55:15