mysql - 获取每天的第一条记录,然后仅检查状况

标签 mysql

我有这样的用户出勤时钟数据。

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

感谢你们的帮助。谢谢🙏🏻

最佳答案

您可以尝试按用户和日期进行有条件聚合,然后检查是否发生(或未发生)精确的午夜时钟:

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

关于mysql - 获取每天的第一条记录,然后仅检查状况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489316/

相关文章:

java - Spring 配置的 Hibernate 方言问题

php - Laravel 5.4 上 PHP 7.0 : PDO Exception - Could not find driver (MySQL)

php - 使用php页面从数据库中删除SQL数据

php - ajax 检查用户名 onblur

Mysql平均但不同

php - 如果 TYPO3 扩展中为空,则按特定字段和另一个字段排序

php - 模态弹出窗口中的文本框未获取由更新单击触发的国家/地区值?

mysql - 查询 MySql 数据库时,VBScript 返回亚洲字符而不是英语

mysql - 在这种情况下是否需要标准化?

mysql - 在 MySQL 命令行中,如何防止数据值中出现的新行在 SELECT 期间导致控制台输出中出现新行?