MySQL和PHP
我正在尝试编写一条SQL语句,该语句将允许我识别本月未签到的个人。我被困在如何写代码上了。
我有两张桌子
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月的日历月份内随时签入,则不应在输出中显示。
提前谢谢你。
发布于 2018-11-18 12:20:52
如果你想要一个曾经签到过的人,那么你可以使用聚合:
select RFID
from attend a
group by RFID
having max(attendDate) < date_add(curdate(), interval 1 - day(curdate()) day);发布于 2018-11-18 10:27:34
我将把它写成一个EXISTS查询:
SELECT
c.custRFID
FROM
tbl_cust c
WHERE NOT EXISTS (SELECT 1 FROM tbl_attend a
WHERE c.custRFID = a.RFID AND
MONTH(a.attendDate) = MONTH(CURDATE()) AND
YEAR(a.attendDate) = YEAR(CURDATE()));发布于 2018-11-21 10:30:15
您可以使用LEFT JOIN来完成此操作。另外,尽量不要在ON/WHERE子句中使用YEAR(column)和MONTH(column)函数,因为在这种情况下SQL将不能使用indeces。下面这样的代码应该能起到作用:
SELECT
c.custRFID,
a.attendID,
a.RFID,
a.attendDate,
a.attendStatus,
a.attendStatusCode,
a.attendNotes
FROM
tbl_cust c
LEFT JOIN tbl_attend a ON (
c.custRFID = a.RFID
AND a.attendDate > DATE_SUB(LAST_DAY(CURDATE()), INTERVAL 1 MONTH)
AND a.attendDate <= LAST_DAY(CURDATE())
)
WHERE
a.RFID IS NULLhttps://stackoverflow.com/questions/53357295
复制相似问题