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 日历年。
我有 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 日历年。