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

按条件对前序行group by统计未结束分配商户数方案咨询

数据集示例

实现方案

核心逻辑

要统计的结果本质是筛选存续期覆盖目标日期的有效分配记录,满足start date ≤ 指定日期 ≤ end date、且分配已完成,再按assigned by和日期维度分组统计商户去重数即可。

方案1:SQL实现(适用数据库存储的数据集)

假设表名为merchant_assign,代码如下:

-- 自定义目标统计日期
SET @target_date = '2024-01-01';

SELECT 
    `assigned by`,
    DATE(`start date`) AS stat_date,
    COUNT(DISTINCT merchant_id) AS alive_merchant_cnt
FROM merchant_assign
WHERE 
    `start date` <= @target_date
    AND `end date` >= @target_date
    -- 可补充分配已完成的状态判断条件,例如 assign_status = 'completed'
GROUP BY `assigned by`, DATE(`start date`)
ORDER BY `assigned by`, stat_date;

如果需要生成连续日期的每日统计结果,可关联日期维表实现:

WITH RECURSIVE date_list AS (
    SELECT MIN(`start date`) AS dt FROM merchant_assign
    UNION ALL
    SELECT dt + INTERVAL 1 DAY FROM date_list WHERE dt < CURDATE()
)
SELECT 
    a.`assigned by`,
    d.dt AS stat_date,
    COUNT(DISTINCT a.merchant_id) AS alive_merchant_cnt
FROM date_list d
LEFT JOIN merchant_assign a
    ON d.dt BETWEEN a.`start date` AND a.`end date`
    -- 补充分配已完成的状态判断条件
GROUP BY a.`assigned by`, d.dt
ORDER BY a.`assigned by`, d.dt;

方案2:Pandas实现(适用本地文件存储的数据集)

import pandas as pd

# 读取数据集,按实际存储格式调整
df = pd.read_excel('merchant_data.xlsx')
# 日期字段格式转换
df['start date'] = pd.to_datetime(df['start date'])
df['end date'] = pd.to_datetime(df['end date'])

# 自定义目标统计日期
target_date = pd.to_datetime('2024-01-01')

# 筛选有效记录
valid_df = df[
    (df['start date'] <= target_date) &
    (df['end date'] >= target_date)
    # 补充分配已完成的过滤条件,例如 & (df['assign_status'] == '已完成')
]

# 分组统计
result = valid_df.groupby(
    ['assigned by', valid_df['start date'].dt.date]
)['merchant_id'].nunique().reset_index(name='alive_merchant_cnt')

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:02