Mysql 基于多个datetime字段中的最小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”年,因此应仅在用

我有上面一张桌子的结构。因此,该表由用户将插入的文档列表组成,每个文档有3个datetime字段

  • 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;