如果标题不够恰当,我很抱歉,我有点难以准确表达。无论如何,我有一个记录人员状态的表格,它长这样:
id, login, state, duration, started_at 1, pdiddy, working, 1200, 2018-05-25 08:30:00 2, pdiddy, lunch, 120, 2018-05-25 9:00:00 3, pdiddy, on_call, 65, 2018-05-25 12:30:00 4, pdiddy, available, 1115, 2018-05-25 12:30:00 5, pdiddy, working, 143, 2018-05-25 12:30:00 6, pdiddy, break1, 150, 2018-05-25 12:30:00 7, pdiddy, working, 2400, 2018-05-25 12:30:00 8, pdiddy, break2, 110, 2018-05-25 12:30:00
我需要按照每个用户和每天来计算除了“lunch”、“break1”和“break2”之外的所有劳动相关持续时间的平均值。所以基本上我需要将任何给定日期中除了 “lunch”、 “break1” 和 “break2” 之外的所有操作记录的持续时间相加,并取其平均值。
我试图像这样做,但问题是它没有在计算平均值之前将与劳动相关的操作记录相加。我无法想出如何做到这一点。
SELECT
log.login,
AVG(log.duration) FILTER (WHERE log.state NOT IN ('lunch', 'break1', 'break2')) AS "labor_average"
FROM
log
GROUP BY 1
显然我并不期望有人为我做这件事。我只需要指引正确的方向。显然我距离解决方案还有很长的路要走,所以我只需要在正确的方向上得到一些推动。非常感谢您提前的帮助!