mysql - 仅显示本月没有更新的记录
问题描述
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 月日历月的任何时间签入,则不应显示在输出中。
先感谢您。
解决方案
如果您想要曾经签入过的人,那么您可以使用聚合:
select RFID
from attend a
group by RFID
having max(attendDate) < date_add(curdate(), interval 1 - day(curdate()) day);
推荐阅读
- java - Eclipse BIRT 在新 Mac 上无法正常工作
- r - 带有 ggplot2 的辅助 x 轴
- javascript - 有没有办法在 JavaScript 中添加或减去对象?
- javascript - 滚动到另一个div后如何使按钮关闭弹出窗口?
- vim - 如何使用 vim 在 V 行模式下移动/移动几行。行相隔 2 行
- express - 将文件提供给路由而不使用 Express 上 url 中的路径文件
- c++ - 重新初始化随机分布
- caching - Github 操作未跨作业缓存 node_modules
- android - Flutter:文件下载出错(下载失败)
- c# - Unity 在重播时将分数重置为 0