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

如何基于日期区间生成月-年维度的Name计数直方图?

实现方案

核心思路是先将每条记录的日期区间拆分成包含的所有独立月份,再按「月-年」分组统计Name的数量,最后生成可视化图表。以下是几种常用场景的具体实现:

场景一:大数据量用SQL预处理 + Python可视化

1. SQL拆分日期区间并统计

以MySQL为例,借助递归CTE将每个日期区间拆分为逐个月份,再分组计数:

WITH RECURSIVE month_series AS (
    SELECT 
        Name,
        -- 转换为年月格式,统一统计维度
        DATE_FORMAT(StartDate, '%Y-%m') AS month_year,
        EndDate
    FROM date_records
    UNION ALL
    SELECT 
        Name,
        DATE_FORMAT(DATE_ADD(month_year, INTERVAL 1 MONTH), '%Y-%m'),
        EndDate
    FROM month_series
    -- 终止条件:生成的年月不晚于EndDate的年月
    WHERE month_year < DATE_FORMAT(EndDate, '%Y-%m')
)
-- 按年月分组,统计唯一Name数量(无需去重则去掉DISTINCT)
SELECT 
    month_year AS `月-年`,
    COUNT(DISTINCT Name) AS name_count
FROM month_series
GROUP BY month_year
ORDER BY month_year;

2. Python读取结果绘制图表

用Pandas+Matplotlib/Seaborn生成可视化(这里用条形图更适配离散的月份维度,符合直方图的展示需求):

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取SQL输出的统计结果(可直接用数据库连接读取,或先导出为CSV)
df = pd.read_csv('monthly_name_count.csv')

# 配置绘图样式
sns.set_style("whitegrid")
plt.figure(figsize=(12, 6))

# 绘制条形图
sns.barplot(x='月-年', y='name_count', data=df, palette='viridis')

# 设置标签与标题
plt.xlabel('月-年', fontsize=12)
plt.ylabel('Name数量', fontsize=12)
plt.title('各月份Name数量分布', fontsize=14)
# 旋转X轴标签避免重叠
plt.xticks(rotation=45)

plt.tight_layout()
plt.show()

场景二:小数据量用Excel手动处理

1. 生成完整月份序列

在空白列(如D列)生成覆盖所有记录起止日期的「月-年」序列:

  • 输入起始年月(如2023-01),下拉填充至结束年月,再将单元格格式设置为mm-yyyy。

2. 统计每个月份的Name数量

  • 若无需去重,在E2单元格输入公式并下拉:
    =COUNTIFS($B:$B,"<="&EOMONTH(D2,0),$C:$C,">="&DATE(YEAR(D2),MONTH(D2),1))
    
  • 若需去重统计唯一Name,使用以下公式:
    =SUMPRODUCT(--(($B:$B<=EOMONTH(D2,0))*($C:$C>=DATE(YEAR(D2),MONTH(D2),1))>0)/COUNTIF($A:$A,$A:$A&""))
    

3. 生成可视化图表

选中「月-年」列和计数列,插入条形图(或Excel中的直方图),调整轴标签与样式即可。

注意事项

  • 边界月份处理:确保跨月的区间(如2023-05-20至2023-06-05)的首尾月份都被计入统计。
  • 去重逻辑:根据业务需求选择是否统计重复的Name实例,SQL中通过DISTINCT控制,Excel中切换对应公式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:53:26