【发布时间】:2021-03-30 08:38:15
【问题描述】:
我有一张员工信息表,包括他们的工作开始和结束日期。我想提取过去十年来在公司工作一整年、年复一年的员工名单。
因此,例如,如果我想获取整个 2010 年一直在公司工作的员工列表,我将执行如下查询:
SELECT employee_name FROM employees
WHERE employment_start_date < DATE '2010-01-01'
AND employment_end_date > DATE '2010-12-31'
现在,我可以从 2010 年到 2020 年每年手动重复此过程 10 次(并手动将相关年份添加为附加列),但肯定有更简单的方法可以使用单个 SQL 查询来完成此操作吗?
更多背景信息: 我实际上是在尝试将我的 Cypher 查询直接转换为 SQL 查询(因为不同的公司使用不同的数据库系统)。使用 Cypher,我将这样做:
WITH [2010,2011,2012,...,2019,2020] AS years
UNWIND years as y
MATCH (e:employees)
WHERE e.employment_start_date.year < y
AND e.employment_end_date.year > y
RETURN y, e.employee_name
所以我正在尝试为此找到一个 SQL 等效项
示例表数据:
|employee_name|employment_start_date|employment_end_date|
|:---:|:---:|:---:|
|John|2009-06-01|2015-03-02|
|Mary|2010-04-02|2014-03-07|
|Joseph|2011-03-02|2011-07-03|
|Stephen|2003-06-14|2011-03-07|
|Dew|2010-06-02|2012-02-06|
期望的结果:
|Year|employee_name|
|:---:|:---:|
|2010|John|
|2010|Stephen|
|2011|John|
|2011|Mary|
|2011|Dew|
【问题讨论】:
-
您能给我们展示一些示例表数据和预期结果吗? (作为格式化文本,没有图像。)
-
感谢提醒,已在详情中添加
-
你不想给 John 6 行吗? (2010, 2011, 2012, 2013, 2014, 2015)
-
确实如此。 5行,从2010年到2014年(2009年入职,2015年离职,这两年全年不在公司)。我只是展示了我想要的 2010 年和 2011 年输出的示例