id | name | reqdt1 | indt2 | outdt3
---|------|---------------------|---------------------|--------------------
1 | A | 2019-02-02 00:00:00 | 2020-02-02 00:00:00 | 2020-02-02 00:00:00
2 | B | | 2020-02-02 00:00:00 |
3 | C | 2020-12-02 00:00:00 | 2021-01-02 00:00:00 | 2021-02-02 00:00:00
4 | D | | 2021-03-02 00:00:00 | 2021-05-02 00:00:00
我具有以上表格的结构。因此,该表由用户要插入的文档列表组成,每个文档都有3个datetime字段
reqdt
,即文件的请求日期,indt
,即用户接受文档的日期和outdt
,再次发送文档的日期。因此,现在我试图编写一个查询,以便用户输入年份,例如,年份输入为2019
。因此,我希望显示带有id = 1
的行。
如果用户输入为2020
,则应显示带有id with 2,3
的行。
如果年份为2021
,则应显示带有id = 4
的行。
我的意思是说,行应显示在日期最小的年份中,例如id = 1
,该日期包括年份'2019'和'2020',因此仅当用户输入时才显示为“ 2019”,而不会显示为“ 2020”年。我如何为上述问题陈述写查询
答案 0 :(得分:2)
您要查找的功能是LEAST
。
LEAST
具有两个或多个参数,返回最小(最小值)的参数
SELECT *
FROM table_name
WHERE YEAR(LEAST(reqdt1, indt2, outdt3)) = 2020;
确保您照顾NULL
值。在这种情况下,您可以按以下方式修改查询(将空值设置为受支持的最大年份9999
)。
SELECT *
FROM table_name
WHERE YEAR(LEAST(IFNULL(reqdt1, '9999'), IFNULL(indt2, '9999'), IFNULL(outdt3, '9999'))) = 2020;