【发布时间】:2025-12-05 19:40:02
【问题描述】:
我有一个管理考勤的查询。我想添加一个功能,显示谁支付了当月的费用,谁没有支付。它几乎可以工作。
SELECT
students.sid,
students.name,
students.day,
students.times,
students.days,
CONCAT(payments.year,'-', payments.forMonth) AS pdate
FROM students
LEFT JOIN payments
ON students.sid = payments.sid
WHERE
students.Active = 'Yes' AND
students.day LIKE 'Tue%' AND
payments.date = (SELECT date FROM payments WHERE students.sid = payments.sid AND
payments.payfor = 'tuition' ORDER BY payments.pid DESC LIMIT 1 )
主要的麻烦部分是 (SELECT date FROM) 子查询。 CONCAT 在 payments 子查询 集合中的 payments.payfor 限制器之前从 payments 表中获取第一个值。因此,在下面的表 sn-p 中,我得到了 sk1 条目,而不是 Dec
的正确 tuitionpid sid amt payfor forMonth year date
1076 69 7000 tuition Dec 2017 2017-12-17
1074 69 4000 sk1 Sep 2017 2017-12-17
1046 69 7000 tuition Nov 2017 2017-11-23
有没有办法在 CONCAT(payments.year,'-', payment.forMonth) 之前或同时获取 payments.date 子查询?
【问题讨论】: