mysql - 显示 MySQL 中 2 个可比记录的 Null 值

标签 mysql

我有来自考勤机系统的示例数据表,如下所示:

ID    Name      In
1     John      2015-04-17 08:00:00
1     John      2015-04-17 16:30:00
1     John      2015-04-20 10:01:00
1     John      2015-04-21 10:00:00
1     John      2015-04-21 19:00:00

这是我的查询:

SELECT a.id AS ID, a.nama AS `Name`, DATE_FORMAT(a.att, '%d-%b-%y') AS `Date`, 
DATE_FORMAT(a.att, '%T') as `IN`, DATE_FORMAT(b.att, '%T') AS `OUT`
FROM attendance a 
INNER JOIN attendance b
on date(a.att) = date(b.att) AND a.id = b.id
WHERE b.att > a.att 

通过上面的查询,我可以将 In(列)时间分成 2 列,像这样 In 和 out:

Id  Name   Date        In         Out 
1   John   17-Apr-15   08:00:00   16:30:00
1   John   21-Apr-15   10:00:00   19:00:00

问题是,如果用户 John 在外出时忘记使用指纹,例如 4 月 20 日,则不会显示数据。所以,我希望我的输出变成这样:

Id  Name   Date        In         Out 
1   John   17-Apr-15   08:00:00   16:30:00
1   John   20-Apr-15   10:01:00   NULL
1   John   21-Apr-15   10:00:00   19:00:00

最佳答案

您应该使用 LEFT JOIN 而不是 INNER JOIN。或者您可以改用此查询:

SELECT
  Id,
  Name,
  DATE(att) AS `Date`,
  DATE_FORMAT(MIN(att), '%T') AS `In`,
  CASE WHEN MAX(att)<>MIN(att) THEN DATE_FORMAT(MAX(att), '%T') END AS `Out`
FROM
  attendance 
GROUP BY
  Id, Name, DATE(att)

请看 fiddle here .

关于mysql - 显示 MySQL 中 2 个可比记录的 Null 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30300475/

相关文章:

php - cakephp 与 order by 的匹配不起作用

从 MySql 到 Excel 的 PHP select 语句。将日期格式化为 YYYYMMDD

mysql - 在 MySQL 中查找最接近的前后时间

php - Laravel 5.5 中的 LeftJoin 包括另一个表

mysql - 将两个 mysql 行与重复的 id 合并

mysql - 如何查看mysql中索引的大小(包括主键)

mysql - 尝试在插入后创建触发器时出现错误 #1064

mysql - 全团订购

mysql - laravel迁移生成的外键约束的名称是什么

mysql - MySQL 中多余的列,我可以删除它吗?