2014-07-12 56 views
-1

我想我需要一点帮助,这个...这是一个时钟。行需要转换为每天的列。下面是一个示例表格以及我试图获得的结果。Mysql - 行日期列

需要考虑的其他问题:
- 有时候人们会忘记注销。
- 有时,人们可以计时进出多次在同一天

这里是我的表: 表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表示在,0表示出

这是我试图得到的结果: - 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

什么是你的排队? – Cheruvian

+0

你需要什么帮助?你没有显示任何代码。 –

+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()聚集是模拟你的桌子上枢轴,以两行(登录和注销)转成两列的方式。希望有所帮助! :)

编辑: 你的数据不符合预期的结果...即 LOGIN 2014年7月10日12时50分00秒和退出2014年7月10日17:40:00。该第10个登出时间不是您为预期结果发布的内容......但是,此查询完成了您想要的内容。