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
非常感谢任何帮助。谢谢!
你或许可以这样做:
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();
想法是:
- 获取
entityno
及其最大 validity
日期,因此 MAX(validity)
。
- 然后通过匹配
entityno
和validity=MAX(validity)
将其作为子查询和JOIN
与contribution
table。这假设 return 每个 entityno
最大 validity
.
- 然后执行
WHERE
条件以获取 validity
日期小于 CURDATE()
的任何 entityno
。
这对某些人来说可能是个简单的问题,但我非常需要帮助。
这是我的 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 |
非常感谢任何帮助。谢谢!
你或许可以这样做:
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();
想法是:
- 获取
entityno
及其最大validity
日期,因此MAX(validity)
。 - 然后通过匹配
entityno
和validity=MAX(validity)
将其作为子查询和JOIN
与contribution
table。这假设 return 每个entityno
最大validity
. - 然后执行
WHERE
条件以获取validity
日期小于CURDATE()
的任何entityno
。