gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:13:16 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com