每天获得第一笔记录,然后仅检查条件

时间:2018-07-24 01:47:42

标签: mysql

我有这样的用户出席率CLOCK IN数据。

id  | userID | created_at
1   | 1      | 2018-06-27 00:15:00
2   | 1      | 2018-06-27 01:43:55
3   | 1      | 2018-06-27 02:43:55
4   | 2      | 2018-06-27 00:15:00
5   | 2      | 2018-06-27 02:43:55
6   | 2      | 2018-06-27 03:43:55
7   | 1      | 2018-06-28 00:55:00
8   | 1      | 2018-06-28 01:43:55
9   | 1      | 2018-06-28 02:43:55
10  | 2      | 2018-06-28 00:00:00
11  | 2      | 2018-06-28 02:43:55
12  | 2      | 2018-06-28 03:43:55

我想要一个用户迟到的日期列表。 假设公司的工作时间为00:00:00, 我如何获得这样的结果:

id  | userID | created_at
1   | 1      | 2018-06-27 00:15:00
4   | 2      | 2018-06-27 00:15:00
7   | 1      | 2018-06-28 00:55:00

感谢您的任何帮助。谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试按用户和日期有条件地进行汇总,然后检查是否有确切的午夜时钟发生(或没有发生):

SELECT
    userID,
    MIN(created_at) AS created_at
FROM yourTable
GROUP BY
    userID,
    DATE(created_at)
HAVING
    SUM(CASE WHEN DATE_FORMAT(created_at, '%H:%i:%s') = '00:00:00' THEN 1 ELSE 0 END) = 0;

enter image description here

Demo