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

SQL计算非连续会员期的累计会员月数(截至指定日期)

计算会员截至指定日期的累计有效会员月数

核心逻辑

对每段订阅周期,计算其与截至日期(2022-09-14)的重叠时长,累加所有有效时长得到总月数。

数据库实现(以SQL Server为例)

假设订阅记录表member_subscriptions包含member_id(会员唯一标识)、start_date(订阅开始日)、end_date(订阅到期日)字段:

整月统计(按月份边界计算)

SELECT 
    SUM(
        DATEDIFF(MONTH, s.start_date, 
            -- 取订阅到期日和截至日期的较小值,避免统计超出截止日的时长
            CASE WHEN s.end_date > '2022-09-14' THEN '2022-09-14' ELSE s.end_date END
        ) + 
        -- 补全跨月不足整月但日数达标的情况,比如5.8到9.14,算4个完整月+1
        CASE 
            WHEN DAY(CASE WHEN s.end_date > '2022-09-14' THEN '2022-09-14' ELSE s.end_date END) >= DAY(s.start_date) 
            THEN 1 
            ELSE 0 
        END
    ) AS total_valid_months
FROM member_subscriptions s
WHERE s.member_id = 1 -- 替换为目标会员ID
  AND s.start_date <= '2022-09-14'; -- 过滤未生效的订阅

精确到天的折算统计

如果需要按实际天数折算成月(按30天/月简化计算):

SELECT 
    SUM(
        DATEDIFF(DAY, s.start_date, 
            CASE WHEN s.end_date > '2022-09-14' THEN '2022-09-14' ELSE s.end_date END
        ) / 30.0
    ) AS total_valid_months
FROM member_subscriptions s
WHERE s.member_id = 1
  AND s.start_date <= '2022-09-14';

手动验证示例

按你描述的会员订阅情况:

  • 2018年订阅:12个月
  • 2019年中断:不计入
  • 2020-2021年订阅:12个月
  • 2021-2022年订阅:12个月
  • 2022-05-08至2022-09-14:4个月零6天(整月统计算4个月,精确折算约4.2个月)

累计整月数:12+12+12+4=40个月;精确折算约40.2个月。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:55:20