MySQL - 如何使用相同的 FOREIGN KEY 忽略小于 CURRENT_DATE 的记录?

MySQL - How to DISREGARD the records less than the CURRENT_DATE with the same FOREIGN KEY?

这对某些人来说可能是个简单的问题,但我非常需要帮助。

这是我的 table 即 contribution:

id entityno oreceipt oramount ordate datestarted validity
5 8 1 60 2021-01-04 2021-01-04 2021-02-04
6 9 2 60 2021-01-04 2021-01-04 2021-02-04
7 8 3 60 2020-12-04 2020-12-04 2021-01-04
11 8 4 60 2021-02-22 2021-03-04 2021-03-04

enter image description here

validity为基础select小于current_date的记录可以用什么查询?

预期输出是红色标记上的记录仅对应entityno = 9。由于 entityno = 9 已于 2021 年 2 月 4 日到期,而 entityno = 8 将于 2021 年 3 月 4 日到期。

预期输出:

id entityno oreceipt oramount ordate datestarted validity
6 9 2 60 2021-01-04 2021-01-04 2021-02-04

Fiddle

非常感谢任何帮助。谢谢!

你或许可以这样做:

SELECT A.* FROM contribution A 
JOIN
(SELECT entityno, MAX(validity) mxv 
  FROM contribution 
  GROUP BY entityno) B
ON A.entityno=B.entityno AND A.validity=B.mxv
WHERE validity < CURDATE();

想法是:

  1. 获取 entityno 及其最大 validity 日期,因此 MAX(validity)
  2. 然后通过匹配entitynovalidity=MAX(validity)将其作为子查询和JOINcontributiontable。这假设 return 每个 entityno 最大 validity.
  3. 然后执行 WHERE 条件以获取 validity 日期小于 CURDATE() 的任何 entityno

Demo fiddle