首页 > 解决方案 > 从单个日期列分别创建开始和结束日期列

问题描述

我的日期列包含所有的两个日期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

标签: sqlapache-sparkapache-spark-sql

解决方案


假设您将数据框注册为名为“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)

推荐阅读