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

如何计算两列日期的平均差值(排除空白日期)

计算两列日期的平均天数(排除空日期记录)

需求明确:计算start_date与end_date之间的天数平均值,同时排除任意一列日期为空的记录。根据你提供的示例数据,有效记录的天数分别为2、3、1,平均值为(2+3+1)/3=2,和预期结果一致。

下面针对不同常用工具给出具体解法:

1. Excel 操作步骤

  • 计算单条记录的天数:在空白列(如C列)首行输入公式 =IF(AND(A2<>"", B2<>""), DATEDIF(A2, B2, "d"), ""),下拉填充至所有行。该公式仅在两个日期都非空时计算天数,否则返回空值。
  • 计算平均值:使用公式 =AVERAGE(C:C),AVERAGE函数会自动忽略空单元格,直接得到有效记录的平均天数。

2. Python Pandas 实现代码

import pandas as pd

# 构造示例数据(实际可替换为读取你的数据源)
df = pd.DataFrame({
    'start_date': ['2022-08-19', '2022-08-21', '2022-08-15', '2022-08-18'],
    'end_date': ['2022-08-21', '', '2022-08-18', '2022-08-19']
})

# 将列转换为日期类型,空值转为NaT
df['start_date'] = pd.to_datetime(df['start_date'], errors='coerce')
df['end_date'] = pd.to_datetime(df['end_date'], errors='coerce')

# 过滤空日期记录,计算天数差后求平均
valid_records = df.dropna(subset=['start_date', 'end_date'])
valid_records['days_diff'] = (valid_records['end_date'] - valid_records['start_date']).dt.days
average_days = valid_records['days_diff'].mean()

print(average_days)  # 输出结果:2.0

3. SQL 查询语句

假设数据存储在表date_table中,通用查询逻辑如下(注意不同数据库的DATEDIFF参数顺序可能有差异):

-- MySQL 写法
SELECT AVG(DATEDIFF(end_date, start_date)) AS average_days
FROM date_table
WHERE start_date IS NOT NULL AND end_date IS NOT NULL;

-- SQL Server 写法
SELECT AVG(DATEDIFF(day, start_date, end_date)) AS average_days
FROM date_table
WHERE start_date IS NOT NULL AND end_date IS NOT NULL;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:06:30