SQL Db2 -如何使用日期时间将两行合并为一行

dgiusagp  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(410)

我有一个表,表中有雇员的登记表以及他们的工作地点。在每一行中,我们都有雇员在该地点的开始日期。它类似于:
| 员工ID|名称名称名称|分支|开始日期|
| - -|- -|- -|- -|
| 一个|无名氏|二百三十四人|2018年1月20日|
| 一个|无名氏|三百个|2019年3月20日|
| 一个|无名氏|二百五十个|2022年1月19日|
| 2个|无名氏|二百个|2019年2月15日|
| 2个|无名氏|二百三十四人|2020年5月20日|
我需要一个查询,返回的数据将查找下一个值,并将下一个分支的开始日期作为当前分支的结束日期。例如:
| 员工ID|名称名称名称|分支|开始日期|结束日期|
| - -|- -|- -|- -|- -|
| 一个|无名氏|二百三十四人|2018年1月20日|2019年3月20日|
| 一个|无名氏|三百个|2019年3月20日|2022年1月19日|
| 一个|无名氏|二百五十个|2022年1月19日|- -|
| 2个|无名氏|二百个|2019年2月15日|2020年5月20日|
| 2个|无名氏|二百三十四人|2020年5月20日|- -|
当没有其他寄存器时,我们假设该员工仍在该分支上工作,因此我们可以将其留空或输入默认值“9999-01-01”。是否有任何方法可以仅使用SQL来实现这样的结果?
另一种解决问题的方法是只返回某个范围内的行的查询。例如,如果我查找John Doe在2020-12-01工作的分支机构,则查询应返回显示分支机构300的行。

bsxbgnwa

bsxbgnwa1#

您可以使用LEAD()根据子组和子组中的顺序查看下一行。
例如:

select
  t.*,
  lead(start_date) over(partition by employee_id order by start_date) as end_date
from t

相关问题