sql - 从单个日期列分别创建开始和结束日期列
问题描述
我的日期列包含所有的两个日期DepartmentID
,一个是start_date
,另一个是end_date
。输出将有两列用于开始日期和结束日期。我想使用 SQL 窗口函数或 Spark Dataframe 来实现。
输入
Employee ID Date DepartmentID SupervisorID
10001 20130101 001 10009
10001 20130909 001 10019
10001 20131201 002 10018
10001 20140501 002 10017
10001 20141001 003 10015
10001 20141201 003 10014
预期产出
Employee ID DateStart DateEnd DepartmentID
10001 20130101 20131201 001
10001 20131201 20141001 002
10001 20141001 Null 003
解决方案
假设您将数据框注册为名为“tmp”的临时视图,并运行以下 SQL 以获得预期结果。
select EmployeeID,DateStart,
lead(DateStart) over (order by DateStart) DateEnd,DepartmentID
from
(select EmployeeID,min(Date) DateStart,DepartmentID
from tmp
group by EmployeeID,DepartmentID)
推荐阅读
- javascript - 将 Typescript 绝对路径转换为 nodejs 相对路径?
- android - Firebase AUTH - 在 Android 中的集成
- css - CSS:在 gif 上翻译属性
- ios - 将项目附加到 [String: Any]() 类型数组 Swift
- python - 遍历二维 zip - python
- java - Java中的字符串不变性和线程安全
- java - Gradle Spring Boot 自定义配置
- scala - 'spark.sql.execution.id is already set' 使用 SparkSQL 和 Futures 的异常
- c++ - 在 VS 15.7.5 中从 opencv 3.4.1 悬停在 Mat 上仍然冻结
- r - pmap 没有跨数据框的行映射