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

如何追踪表内积分变动?每日PointsWon变化量统计方法咨询

嘿,这个需求其实用SQL的窗口函数就能轻松搞定,绝对是最简便的方案!

核心思路:用LAG()窗口函数计算日环比变化

你的需求本质是计算当日积分与前一日积分的差值,而LAG()函数专门用来获取分组内前一行的数据,完美适配这个场景,比写自连接要简洁太多。

假设你的表名为daily_points,直接用下面的SQL语句就能得到结果:

SELECT
    Date,
    PointsWon,
    -- 用当日积分减去前一日积分,得到变化量
    PointsWon - LAG(PointsWon) OVER (ORDER BY Date) AS PointsChange
FROM daily_points
-- 按日期倒序,方便查看最新数据
ORDER BY Date DESC;

代码解释:

  • LAG(PointsWon) OVER (ORDER BY Date):这部分会先把数据按日期升序排列,然后为每一行抓取它前一天的PointsWon值。
  • PointsWon - LAG(...):直接做减法,正数代表积分增加,负数代表减少,一目了然。

用你提供的示例数据,运行后会得到这样的结果:

DatePointsWonPointsChange
2018-03-20456754
2018-03-194513634
2018-03-183879NULL

优化小技巧:

如果想把最早日期的NULL(因为没有前一天数据)改成0,可以用COALESCE()函数处理:

SELECT
    Date,
    PointsWon,
    COALESCE(PointsWon - LAG(PointsWon) OVER (ORDER BY Date), 0) AS PointsChange
FROM daily_points
ORDER BY Date DESC;

扩展场景:多用户积分追踪

如果你的表还有UserID字段(需要按用户分别统计),只需要在OVER()里加上PARTITION BY UserID,就能按用户分组计算每日变化:

SELECT
    UserID,
    Date,
    PointsWon,
    PointsWon - LAG(PointsWon) OVER (PARTITION BY UserID ORDER BY Date) AS PointsChange
FROM daily_points
ORDER BY UserID, Date DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:10:58