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

如何按日期、摄影师条件计算分钟级时间差(支持Excel/Python/SQL)

时长计算实现方案

所有方案都需要先将整个表格按【Date升序 → Photographer升序 → Time升序】排序,保证同个摄影师同天的记录按时间先后排列,计算结果才准确

方案1:Excel公式实现

假设表头在第1行,数据从第2行开始,TimeWorked为D列:

  1. 第2行的D2单元格直接填0(分组首行固定为0)
  2. 第3行的D3单元格输入公式:
    =IF(OR(A3<>A2,C3<>C2),0,ROUND((B3-B2)*1440,0))

公式说明:判断当前行与上一行的日期、摄影师是否完全一致,只要有一个字段变化就返回0,否则将时间差乘以1440(天转分钟的换算系数)得到分钟级时长,比MINUTE函数兼容性更高,不会出现小时部分被忽略的问题。

  1. 选中D3单元格下拉填充到所有行即可,1.3万行几秒就能完成计算。

方案2:Python实现(适合批量处理,容错率更高)

  1. 先安装依赖库:
    pip install pandas
  2. 执行如下代码,按注释修改文件路径即可:
import pandas as pd

# 读取原始文件,Excel格式替换为pd.read_excel("原始文件路径.xlsx")
df = pd.read_csv("你的原始文件路径.csv")

# 合并日期时间为完整时间戳,若你的日期格式为月/日/年,将format改为'%m/%d/%Y %I:%M:%S %p'
df["datetime"] = pd.to_datetime(df["Date"] + " " + df["Time"], format="%d/%m/%Y %I:%M:%S %p")

# 按摄影师+日期分组计算相邻行时间差,首行空值填充为0
df["TimeWorked"] = df.groupby(["Photographer", "Date"])["datetime"].diff().dt.total_seconds().div(60).fillna(0).round(0).astype(int)

# 导出结果,不会覆盖原始文件
df.to_csv("计算完成结果.csv", index=False, encoding="utf-8-sig")

方案3:SQL实现(数据存储在数据库时使用)

假设表名为photographer_work_log,SQL语句如下:

SELECT 
    Date,
    Time,
    Photographer,
    CASE 
        WHEN LAG(CONCAT(Date, ' ', Time)) OVER (PARTITION BY Photographer, Date ORDER BY STR_TO_DATE(CONCAT(Date, ' ', Time), '%d/%m/%Y %r')) IS NULL
        THEN 0
        ELSE TIMESTAMPDIFF(
            MINUTE,
            LAG(STR_TO_DATE(CONCAT(Date, ' ', Time), '%d/%m/%Y %r')) OVER (PARTITION BY Photographer, Date ORDER BY STR_TO_DATE(CONCAT(Date, ' ', Time), '%d/%m/%Y %r')),
            STR_TO_DATE(CONCAT(Date, ' ', Time), '%d/%m/%Y %r')
        )
    END AS TimeWorked
FROM photographer_work_log
ORDER BY STR_TO_DATE(Date, '%d/%m/%Y'), Photographer, STR_TO_DATE(Time, '%r');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:05