【发布时间】:2026-01-23 01:15:02
【问题描述】:
我的时钟输出到一个 SQL 表,其中有一列用于输入和输出时间戳,另一列是员工姓名。我希望能够使用来自 Google Sheets 脚本的 SQL 查询来计算每个员工的每日工作时间。
这是我所拥有的:
ID Name Timestamp
1023 Emily Bromley 2016-08-15 9:00:00
1023 Emily Bromley 2016-08-15 17:00:00
1023 Emily Bromley 2016-08-16 9:00:00
1023 Emily Bromley 2016-08-16 17:00:00
1023 Emily Bromley 2016-08-17 9:00:00
1023 Emily Bromley 2016-08-17 15:30:00
1023 Emily Bromley 2016-08-22 9:00:00
1023 Emily Bromley 2016-08-22 16:00:00
1023 Emily Bromley 2016-08-23 8:55:00
1023 Emily Bromley 2016-08-23 16:58:00
1023 Emily Bromley 2016-08-24 8:20:00
1023 Emily Bromley 2016-08-24 16:59:00
1023 Emily Bromley 2016-08-25 9:52:00
1023 Emily Bromley 2016-08-25 16:59:00
1023 Emily Bromley 2016-08-29 9:11:00
1023 Emily Bromley 2016-08-29 16:57:00
我想做的是将日期组合在一起并找到时间戳的持续时间:
ID Name Day and Duration
1023 Emily Bromley 2016-08-15 8
1023 Emily Bromley 2016-08-16 8
1023 Emily Bromley 2016-08-17 6.5
1023 Emily Bromley 2016-08-22 7
1023 Emily Bromley 2016-08-23 8.1
1023 Emily Bromley 2016-08-24 8.5
1023 Emily Bromley 2016-08-25 8.1
1023 Emily Bromley 2016-08-29 8.2
我尝试将 MIN() 和 MAX() 与 GROUP BY 一起使用,但它们没有将日期组合在一起,这是我最新的 SQL 查询:
SELECT access_user.user_id,
access_user.first_name + ' ' + access_user.last_name,
MIN(user_time_log.log_time),
MAX(user_time_log.log_time)
FROM access_user
INNER JOIN user_time_log
on access_user.user_id=user_time_log.user_id
GROUP BY access_user.user_id,
access_user.first_name + ' ' + access_user.last_name
哪些输出:
1023 Emily Bromley 2016-08-15 9:00:00 2017-02-17 13:01:00
当然还有其他员工,但每个人每天只打卡一次。我已经用谷歌搜索了一段时间,但没有遇到任何与我的问题类似的东西。非常感谢任何帮助。
【问题讨论】:
-
首先,您使用的是什么 RDBMS?如果它支持窗口函数,则平台之间的语法略有不同。如果没有,则有一种通用但通常效率较低的技术来解决这类问题。
-
现在...您只获得 1 行的原因是您没有考虑 GROUP BY 中的日期。因此,每个
user_id的所有内容都汇总为一行。您需要使用从日期时间字段确定日期的计算进行分组。例如。在 Sql Server 中,您将在此处使用这些技术:*.com/q/1843395/224704