我想我需要一点帮助......这是一个时间段。行需要每天转换为列。下面是一个示例表和我想要获得的结果。
需要考虑的其他问题:
- 有时人们会忘记时钟。
- 有时候人们可能会在同一天多次上下班次
这是我的表格: 表A
+-------+-----------+-----------------------+---------+
| ID | User_id | DateTime | inorout |
+-------+-----------+-----------------------+---------+
| 1 | 5 | 2014-07-10 12:50:00 | 1 |
| 2 | 5 | 2014-07-10 17:40:00 | 0 |
| 3 | 5 | 2014-07-11 01:40:00 | 1 |
| 4 | 5 | 2014-07-11 02:50:00 | 0 |
| 5 | 5 | 2014-07-12 03:20:00 | 1 |
+-------+-----------+-----------------------+---------+
1代表In,0代表Out
这是我想要获得的结果: - User_id 5的结果
ID In Out Hours worked
1 2014-07-10 12:50:00 2014-07-10 17:55:00 5:05
2 2014-07-11 01:40:00 2014-07-11 02:50:00 1:10
3 2014-07-12 03:20:00 NULL NULL
谢谢!
答案 0 :(得分:0)
我相信这会为你想要的东西做点什么......基本上你想在桌子上使用一个支点但是有一种方法可以实现这个而不用实际的支点!像这样......
SELECT
id,
Login,
Logout,
TIMESTAMPDIFF(MINUTE, Login, Logout) / 60 as 'Hours Worked'
FROM(
SELECT id,
MAX(IF(inorout = 1, DateTime, NULL)) AS Login,
MAX(IF(inorout = 0, DateTime, NULL)) AS Logout
FROM table_name
GROUP BY DATE(DateTime)
) AS temp;
SEE FIDDLE: 在日期上使用MAX()聚合是一种模拟表上的数据透视表以将两行(登录和注销)转换为两列的方法。希望有所帮助! :)
修改强> 您的数据与预期结果不符...即 登录2014-07-10 12:50:00和LOGOUT 2014-07-10 17:40:00 ..第10次注销时间不是你发布的预期结果...但是这个查询完成你想要的。