Mysql 基于多个datetime字段中的最小datetime获取记录
我有上面一张桌子的结构。因此,该表由用户将插入的文档列表组成,每个文档有3个datetime字段Mysql 基于多个datetime字段中的最小datetime获取记录,mysql,sql,datetime,Mysql,Sql,Datetime,我有上面一张桌子的结构。因此,该表由用户将插入的文档列表组成,每个文档有3个datetime字段 reqdt,请求文件的日期 indt,用户接受文档的日期,以及 outdt,再次发回文档的日期 因此,现在我正在尝试编写一个查询,用户将输入年份,例如,年份输入为2019。因此,我希望显示id为1的行 如果用户输入为2020,则应显示id为2,3的行 如果年份为2021,则应显示id=4的行 我的意思是,行应显示在具有最小日期的年份中,例如id=1日期包括“2019”年和“2020”年,因此应仅在用
reqdt
,请求文件的日期indt
,用户接受文档的日期,以及outdt
,再次发回文档的日期2019
。因此,我希望显示id为1的行
如果用户输入为2020
,则应显示id为2,3的行
如果年份为2021
,则应显示id=4的行
我的意思是,行应显示在具有最小日期的年份中,例如id=1
日期包括“2019”年和“2020”年,因此应仅在用户输入为“2019”时显示,而不显示“2020”年。如何为上述问题陈述编写查询您正在寻找的函数是
LEAST
对于两个或多个参数,返回最小(最小值)参数
确保注意NULL
值。在这种情况下,您可以按以下方式修改查询(将空值设为受日期支持的最大年份9999
)
您正在寻找的功能是
LEAST
对于两个或多个参数,返回最小(最小值)参数
确保注意NULL
值。在这种情况下,您可以按以下方式修改查询(将空值设为受日期支持的最大年份9999
)
所有表字段的值都类似于2021-05-02 00:00:00
,因此最好将其更改为数据类型DATE
所有表字段的值都类似于2021-05-02 00:00:00
,因此最好将其更改为数据类型DATE
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
SELECT *
FROM table_name
WHERE YEAR(LEAST(reqdt1, indt2, outdt3)) = 2020;
SELECT *
FROM table_name
WHERE YEAR(LEAST(IFNULL(reqdt1, '9999'), IFNULL(indt2, '9999'), IFNULL(outdt3, '9999'))) = 2020;