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

如何用SQL实现基于每日粉丝变化量计算历史总粉丝数?

SQL实现每日粉丝总数计算(基于增减量和总粉丝数)

现有每日粉丝增减数据如下:

datefollower
23-10-20221
22-10-20220
21-10-20221
20-10-20222

已知总粉丝数为250,需要转换为每日的累计粉丝总数,预期输出:

datefollower
23-10-2022251
22-10-2022250
21-10-2022249
20-10-2022247

实现思路

从预期结果可推导规律:

  • 最新日期的粉丝总数 = 给定总粉丝数 + 最新日期的粉丝增减量
  • 历史日期的粉丝总数 = 后一天的粉丝总数 - 当前日期的粉丝增减量

我们可以通过窗口函数计算每个日期到最新日期的增减量总和,结合最新日期的总数推导每日粉丝数。

SQL代码(通用版本)

假设数据表名为daily_followers,包含date(日期)和follower(当日粉丝增减量)两列:

SELECT 
    date,
    -- 计算最新日期的粉丝总数:给定总粉丝数 + 最新日期的增减量
    (250 + (SELECT follower FROM daily_followers WHERE date = (SELECT MAX(date) FROM daily_followers)))
    -- 减去从当前日期到最新日期的增减量总和,再加当前日期的增减量得到当日总数
    - SUM(follower) OVER (ORDER BY date ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
    + follower AS follower
FROM daily_followers
-- 按日期从新到旧排序,匹配预期输出格式
ORDER BY date DESC;

处理日期字符串的版本(针对字符串格式日期)

如果date列是dd-mm-yyyy格式的字符串,需先转换为日期类型确保排序正确,以MySQL为例:

SELECT 
    date,
    (250 + (SELECT follower FROM daily_followers WHERE STR_TO_DATE(date, '%d-%m-%Y') = (SELECT MAX(STR_TO_DATE(date, '%d-%m-%Y')) FROM daily_followers)))
    - SUM(follower) OVER (ORDER BY STR_TO_DATE(date, '%d-%m-%Y') ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
    + follower AS follower
FROM daily_followers
ORDER BY STR_TO_DATE(date, '%d-%m-%Y') DESC;

代码解释

  1. 最新日期总数计算:通过子查询获取最新日期的增减量,与给定的总粉丝数250相加,得到最新日期的粉丝总数(示例中为251)。
  2. 累计增减量计算:窗口函数SUM(follower) OVER (...)计算从当前日期到最新日期的所有增减量之和。
  3. 当日总数推导:用最新日期的总数减去上述累计和,再加上当前日期的增减量,即可得到当日的粉丝总数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:50:28