首页 > 解决方案 > 仅显示本月没有更新的记录

问题描述

MySQL 和 PHP

我正在尝试编写一条 SQL 语句,以便我识别本月未登记的个人。我被困在如何编写代码上。

我有 2 张桌子

tbl_cust c tbl_attend a

    SELECT
       c.custRFID,
       a.attendID,
       a.RFID,
       a.attendDate,
       a.attendStatus,
       a.attendStatusCode,
       a.attendNotes
    FROM
       tbl_cust c RIGHT OUTER JOIN tbl_attend a ON c.custRFID = a.RFID
    WHERE
       MONTH(a.attendDate) <> MONTH(CURDATE()) AND YEAR(a.attendDate) = 
       YEAR(CURDATE())

该代码过滤掉本月,但是,它返回本月之前的每个日期。我只想显示表 c 中本月在表 a 中没有条目的名称。我不需要所有的记录。

-------------------------------------------------------------
ID    RFID          Date         Time   Status    Status Code
-------------------------------------------------------------
1     01 02 03 E1   2018-01-03   1835    1        1
2     02 02 04 E2   2018-01-06   1235    1        1
3     01 02 03 E1   2018-02-07   1801    1        1
4     02 02 04 E2   2018-02-11   1109    1        1
5     01 02 03 E1   2018-03-03   1835    1        1
6     02 02 04 E2   2018-03-06   1235    1        1
7     01 02 03 E1   2018-04-07   1801    1        1
8     02 02 04 E2   2018-04-11   1109    1        1
9     01 02 03 E1   2018-05-01   1032    1        1

如果这是 2018 年 5 月 16 日,则输出如下:

-----------------------------------------------------------
ID    RFID          Date         Time   Status    Status Code
-------------------------------------------------------------
8     02 02 04 E2   2018-04-11   1109    1        1

这仅使用 2 个客户,因为实际表中最终将有超过 5,000 个客户。每月至少有 1 个条目。有些每月有 4 个条目中的 3 个,但是,我只想查看当前日历月中没有条目的条目。即...如果他们在 2018 年 5 月日历月的任何时间签入,则不应显示在输出中。

先感谢您。

标签: mysqlsql

解决方案


如果您想要曾经签入过的人,那么您可以使用聚合:

select RFID
from attend a
group by RFID
having max(attendDate) < date_add(curdate(), interval 1 - day(curdate()) day);

推荐阅读