MySQL 基于加入日期和离开日期的用户年份报告

MySQL user year report based on join date and left date

我有 MYSQL 名员工 table 是这样的:

ID name joining_date date_left
1 ABC 2018-01-01 2019-04-30
2 DEF 2019-01-01 2020-12-31
3 GHI 2019-01-01 null
4 JKL 2021-11-30 2022-04-02

我需要在一个查询中输出下面提到的情况。

1).如果我想要 2018 年的报告(这里,2018 年表示开始日期 2018-01-01 和结束日期 2018-12-31) 在这种情况下,只有 id 为 1 的行应该是 return

2).如果我想要2019年的报告 在这种情况下,id 为 1、2 和 3 的行应为 return

3).如果我想要 2020 年的报告 在这种情况下,id 为 2 和 3 的行应该是 return 因为对于 #3 date_left 是空的,这意味着员工没有离开

4).如果我想要 2021 年的报告 在这种情况下,id 为 3 和 4 的行应该 return 因为 date_left 对于 #3 为空。

5).如果我想要 2022 年的报告 在这种情况下,id 为 3 和 4 的行应该 return 因为 date_left 对于 #3 为空。

任何人都可以在这个 MySQL 查询中提供帮助吗?

您可以将此视为重叠范围问题,在加入和离开日期范围之间,以及涵盖整个日历年的范围。 2018年,我们可以尝试:

SELECT *
FROM employees
WHERE ('2018-01-01' <= date_left OR date_left IS NULL) AND
      '2018-12-31' >= joining_date;

请在此处查看 demo 2021 日历年。