0

我在对每日时间记录中的数据进行分组和排序以自动生成报告时遇到问题。表结构DTR如下:

记录日期 记录时间 员工姓名 记录类型
2012 年 9 月 13 日 17:00:00 SALITA,LYNYRD ANTONIO 注销
9/13/2012 8:05:00 SALITA, LYNYRD ANTONIO 登录
2012 年 9 月 12 日 17:05:00 SALITA,LYNYRD ANTONIO 注销
9/12/2012 8:05:00 SALITA, LYNYRD ANTONIO 登录
2012 年 7 月 10 日 17:00:00 加西亚,阿尔文登出
2012 年 7 月 10 日 17:00:00 奥雷诺,莉亚登出
2012 年 7 月 10 日 17:00:00 SALITA,LYNYRD ANTONIO 注销
2012 年 7 月 10 日 17:00:00 坎西诺,保罗登出
2012 年 7 月 10 日 17:00:00 BELO,RIO 注销
2012 年 7 月 10 日 17:00:00 MAG-ISA,美贝尔登出
2012 年 7 月 10 日 17:00:00 TARINE, KAREN 登出
2012 年 7 月 10 日 17:00:00 REYES,ANDREA 注销
2012 年 7 月 10 日 17:00:00 纳瓦罗,克里斯蒂娜登出
7/10/2012 10:30:00 MAG-ISA, MAYBELLE 登录
7/10/2012 8:00:00 SALITA, LYNYRD ANTONIO 登录
2012 年 7 月 10 日 8:00:00 卡西诺,保罗登录
2012 年 7 月 10 日 8:00:00 BELO,RIO 登录
2012 年 7 月 10 日 7:40:00 奥雷诺,莉亚登录
2012 年 7 月 10 日 7:30:00 加西亚,阿尔文登录
2012 年 7 月 10 日 7:25:00 TARINE, KAREN 登录
2012 年 7 月 10 日 7:10:00 纳瓦罗,克里斯蒂娜 登录
2012 年 7 月 10 日 7:10:00 REYES,ANDREA 登录

我希望将其作为查询处理,输出如下:

登录日期 员工姓名 登录 注销
2012 年 9 月 13 日萨利塔,林尼德安东尼奥 8:05:00 17:00:00
2012 年 9 月 12 日萨利塔,林尼德安东尼奥 8:05:00 17:05:00
2012 年 7 月 10 日加西亚,阿尔文 7:30:00 17:00:00
2012 年 7 月 10 日奥雷诺,莉亚 7:40:00 17:00:00
2012 年 7 月 10 日萨利塔,林尼德安东尼奥 8:00:00 17:00:00
2012 年 7 月 10 日卡西诺,保罗 8:00:00 17:00:00
2012 年 7 月 10 日 BELO,里约热内卢 8:00:00 17:00:00
2012 年 7 月 10 日 MAG-ISA,美宝莲 10:30:00 17:00:00
2012 年 7 月 10 日 塔林,凯伦 7:25:00 17:00:00
2012 年 7 月 10 日 雷耶斯,安德烈亚 7:10:00 17:00:00
7/10/2012 纳瓦罗,克里斯蒂娜 7:10:00 17:00:00

我如何实现这一目标?

4

2 回答 2

2

这就是你想要得到的:

SELECT DATE_FORMAT(LogDate, '%d/%c/%Y') AS LogDate, EmployeeName,
   (GROUP_Concat(CASE LogType WHEN 'LOGIN' THEN LogTime END)) AS LOGIN,
   (GROUP_Concat(CASE LogType WHEN 'LOGOUT' THEN LogTime END)) AS LOGOUT
FROM myTable
GROUP BY LogDate, EmployeeName
ORDER BY LogDate desc;

看到这个 SQLFiddle

查询说明:

使用CASE语句将行转换为列(for Loginand Logout

SELECT DATE_FORMAT(LogDate, '%d/%c/%Y') AS LogDate, EmployeeName,
   (CASE LogType WHEN 'LOGIN' THEN LogTime END) AS LOGIN,
   (CASE LogType WHEN 'LOGOUT' THEN LogTime END) AS LOGOUT
FROM myTable
GROUP BY LogDate, EmployeeName, LogTime
ORDER BY LogDate desc;

但这会让你喜欢这个 SQLFiddle。

所以你需要使用GROUP_CONCAT(MySQL) 来加入LogTimeNULL删除LogTimefromGROUP BY子句。

于 2012-09-13T08:22:36.777 回答
0
Select  Log Date,   Employee Name,       LOGIN       LOGOUT 
    case(Log Type)
    when 'LOGIN' then Log Time AS LOGIN
    Else 
    Log Time AS LOGOUT
    End
From
YOUR_TABLE
order by Log Date desc
于 2012-09-13T08:05:44.563 回答