Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-日期从行到列_Mysql - Fatal编程技术网

Mysql-日期从行到列

Mysql-日期从行到列,mysql,Mysql,我想我需要一点帮助。。。这是一个时钟。每天需要将行转换为列。下面是一个示例表和我试图得到的结果 需要考虑的其他问题: -有时人们会忘记打卡 -有时,人们可能会在同一天多次打卡进出 这是我的桌子: 表A +-------+-----------+-----------------------+---------+ | ID | User_id | DateTime | inorout | +-------+-----------+----------------

我想我需要一点帮助。。。这是一个时钟。每天需要将行转换为列。下面是一个示例表和我试图得到的结果

需要考虑的其他问题:
-有时人们会忘记打卡
-有时,人们可能会在同一天多次打卡进出

这是我的桌子: 表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代表输出

这就是我想要得到的结果: --用户_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 

谢谢大家!

我相信这会满足你的需求。。。基本上你想在桌子上使用一个轴,但是有一种方法可以在不使用轴的情况下实现这一点!!像这样

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;
在日期上使用MAX()聚合是一种模拟表上轴心的方法,可以将两行(登录和注销)转换为两列。希望有帮助!:)

编辑: 您的数据与预期结果不匹配。。。即
登录2014-07-10 12:50:00和注销2014-07-10 17:40:00。。10号的注销时间不是你发布的预期结果。。。然而,这个查询完成了您想要的

你需要什么帮助?您没有显示任何代码。我的问题是我有一个表,我正在尝试得到那个结果。我没有发布任何代码,因为几个小时后我没有取得任何进展。我不明白反对票,我的问题出了什么问题?@scottpaterson你看过我的帖子了吗?0是注销。。1是登录名。