首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从两个具有签入签出时间的表中获取数据的SQL。

从两个具有签入签出时间的表中获取数据的SQL。
EN

Stack Overflow用户
提问于 2022-04-22 11:28:24
回答 1查看 38关注 0票数 -1

我有两个桌子的员工和考勤人员

雇员表

代码语言:javascript
复制
sn   name   badge_id    user_id     employee_id
 1  user1   153      usr1          222

出席表

代码语言:javascript
复制
id  badge_id    status              timestamp
1   153    Check_out    2022-04-21 17:31:32.000000
2   153      Check_in   2022-04-21 11:31:27.000000
3   153      Check_out  2022-04-21 10:31:18.000000
4   153      Check_in   2022-04-21 08:31:13.000000 

期待得到的结果;

代码语言:javascript
复制
Name  badge_id user_id  Clock-In                    Clock-out                   HoursWorked
User1  153       usr1   2022-04-21 08:31:13.000000  2022-04-21 10:31:18.000000  02:00:05  
User1  153       usr1   2022-04-21 11:31:27.000000  2022-04-21 17:31:32.000000  06:00:05

请提出一些建议..。我可以从各个表中获得这些数据,但不能在badge_id外键上使用Join。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-23 07:37:01

解决您的问题:

代码语言:javascript
复制
SELECT e.name, a.badge_id, e.user_id, a.timestamp check_in_at,
       MIN(b.timestamp) check_out_at, 
       TIMEDIFF(MIN(b.timestamp),a.timestamp) total_time 
FROM attendance a
INNER JOIN attendance b
ON a.timestamp < b.timestamp 
AND UPPER(a.status) = 'CHECK_IN' 
AND UPPER(b.status) = 'CHECK_OUT'
INNER JOIN employee e
ON a.badge_id = e.badge_id
GROUP BY e.name, a.badge_id, e.user_id,a.timestamp
ORDER BY a.timestamp;

另外,更新查询以获得所需的结果:

代码语言:javascript
复制
SELECT e.name, t.badge_id, e.user_id, t.timestamp check_in_at,
       t.next_TIMESTAMPDIFF check_out_at,
       TIMEDIFF(t.next_TIMESTAMPDIFF, t.timestamp ) total_time 
FROM 
(SELECT *, 
        LEAD(timestamp) OVER (PARTITION BY badge_id ORDER BY timestamp) next_TIMESTAMPDIFF 
 FROM attendance 
 WHERE timestamp BETWEEN '2022-04-21 08:00:00' AND '2022-04-21 18:00:00'
) t
INNER JOIN employee e
ON t.badge_id = e.badge_id
WHERE t.status = 'check_in' 
ORDER BY check_in_at;

检查小提琴链接中的工作示例代码和输出:

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d6ead44d3114dd918f6d6d2843ab83d2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71968014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档