如果结束时间值为NULL,则将该值替换为具有相同id的下一个开始时间

时间:2018-03-12 14:16:38

标签: mysql sql hive hql hiveql

我有一个包含3个字段的表。




    

  • START_TIME
  • 

  • END_TIME
  • 

  • ID
  • 





如果结束时间是 NULL ,我需要用相同 ID的最近时间替换




 <代码> ------------------------------ ----&#XA; | ID | Start_time | End_time |&#xA; ----------------------------------&#xA; | 1 | 2016-01-01 | NULL |&#xA; | 2 | 2016-01-01 | 2016-01-02 |&#xA; | 1 | 2016-01-02 | 2016-01-03 |&#xA; | 1 | 2016-01-03 | 2016-01-04 |&#xA;  
&#xA;&#xA;

预期输出

&#xA;&#xA;
   - --------------------------------&#XA; | ID | Start_time | End_time |&#xA; ---------------------------------&#xA; | 1 | 2016-01-01 | 2016-01-02 |&#xA; | 2 | 2016-01-01 | 2016-01-02 |&#xA; | 1 | 2016-01-02 | 2016-01-03 |&#xA; | 1 | 2016-01-03 | 2016-01-04 |&#xA;  
&#xA;

1 个答案:

答案 0 :(得分:0)

您可以使用id的子查询分组来获取min end_time

  select a.id, a.Start_time
      , case when a.End_time is null then t.min_end_time else  a.End_time end End_time 
  from my_table 
  inner join (
  select id, min(End_time) min_end_time
  from my_table 
  group by id ) t on t.id = a.id