根据多个日期时间字段中最小的日期时间获取记录

时间:2020-09-29 02:09:26

标签: mysql sql datetime

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字段

  1. reqdt,即文件的请求日期,
  2. indt,即用户接受文档的日期和
  3. outdt,再次发送文档的日期。

因此,现在我试图编写一个查询,以便用户输入年份,例如,年份输入为2019。因此,我希望显示带有id = 1的行。

如果用户输入为2020,则应显示带有id with 2,3的行。

如果年份为2021,则应显示带有id = 4的行。

我的意思是说,行应显示在日期最小的年份中,例如id = 1,该日期包括年份'2019'和'2020',因此仅当用户输入时才显示为“ 2019”,而不会显示为“ 2020”年。我如何为上述问题陈述写查询

1 个答案:

答案 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;
相关问题