mysql和php
我正在尝试编写一个sql语句,它将允许我识别一个本月没有签入的个人。我被困在如何写代码上。
我有两张table
客户出席会议
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中本月没有条目的名称。我不需要所有的记录。
-------------------------------------------------------------
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个客户,因为实际的表中最终将有5000多个客户。每月至少一次。有些每月会有4个条目中的3个条目,但是,我只想看到当前日历月中没有条目的条目。i、 e….如果他们在2018年5月的日历月内的任何时间签入,他们不应显示在输出上。
先谢谢你。
3条答案
按热度按时间5cg8jx4n1#
我会把它写成
EXISTS
查询:js81xvg62#
如果您希望有人曾经签入,则可以使用聚合:
v64noz0r3#
您可以使用左连接来完成此操作。另外,尽量不要在on/where子句中使用year(column)和month(column)函数,因为在这种情况下,sql将无法使用索引。像这样的事情应该可以做到: