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

带条件的Aggregate functions应用:每日事件数据表技术咨询

嘿,针对你这张每日驾驶事件记录表,我整理了几个实用的带条件聚合函数的实现方法,结合你的数据场景来看,直接就能用:

1. 按日期统计有效记录的总驾驶时长

注意你数据里有一条起始/结束时间为0000-00-00 00:00:00的无效记录,聚合时需要先过滤掉:

SELECT 
    Logdate,
    SEC_TO_TIME(SUM(TIME_TO_SEC(Drivetime))) AS total_drivetime
FROM drive_logs -- 假设你的表名为drive_logs
WHERE Firstart != '0000-00-00 00:00:00'
GROUP BY Logdate;

这里用TIME_TO_SEC把驾驶时长转成秒数求和,再用SEC_TO_TIME转回时间格式,避免直接对时间类型求和的精度问题。

2. 统计每日有效驾驶记录的数量

如果你需要知道每天有多少条真实的驾驶记录:

SELECT 
    Logdate,
    COUNT(*) AS valid_drive_count
FROM drive_logs
WHERE Firstart != '0000-00-00 00:00:00'
GROUP BY Logdate;

COUNT(*)会统计所有符合WHERE条件的行数,完美适配这个需求。

3. 按日期统计最长/最短驾驶时长

想知道每天单次驾驶的最长和最短耗时:

SELECT 
    Logdate,
    MAX(Drivetime) AS max_drivetime,
    MIN(Drivetime) AS min_drivetime
FROM drive_logs
WHERE Firstart != '0000-00-00 00:00:00'
GROUP BY Logdate;

时间类型的字段可以直接用MAX和MIN函数获取极值,非常方便。

4. 多条件聚合:统计每日驾驶时长超30分钟的总时长

如果需要更精细化的统计,比如只累加单次时长超过30分钟的记录:

SELECT 
    Logdate,
    SEC_TO_TIME(SUM(CASE 
        WHEN TIME_TO_SEC(Drivetime) > 1800 THEN TIME_TO_SEC(Drivetime)
        ELSE 0
    END)) AS total_over_30min_drivetime
FROM drive_logs
WHERE Firstart != '0000-00-00 00:00:00'
GROUP BY Logdate;

用CASE语句做条件判断,只对符合要求的时长进行求和,灵活应对复杂的统计规则。

5. 聚合+明细:同时查看每日总和与单条记录

如果不想丢失明细数据,又想看到每日的聚合结果,可以用窗口函数:

SELECT 
    Logdate,
    Firstart,
    Laststop,
    Drivetime,
    SEC_TO_TIME(SUM(TIME_TO_SEC(Drivetime)) OVER (PARTITION BY Logdate)) AS daily_total
FROM drive_logs
WHERE Firstart != '0000-00-00 00:00:00';

OVER(PARTITION BY Logdate)会按日期分组计算总和,同时保留每条记录的详细信息,不用压缩行数。

这些方法可以根据你的实际需求调整条件,比如修改WHERE子句的过滤规则,或者调整CASE里的判断逻辑,适配不同的统计场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:52:45