【数据库】HIVE SQL--相邻时间问题处理

求每个员工的连续工作时间段及工资和

select name, first1, last1,salary * (datediff(last1, first1)+1)as salary
  from (select name, num, salary, min(date) as first1, max(date) as last1
          from (SELECT a.name, a.date, date_sub(date, rn - 1) num, salary
                  FROM (SELECT name,
                               date,
                               salary,
                               row_number() over(PARTITION BY name ORDER BY date) rn
                          FROM dw_htlbizdb.tmp_qh_liu_interview_data
                         GROUP BY name, date, salary
                       ) a
               ) b
         group by name, num, salary
       ) a

结果:

对于连续时间问题的处理还有一种方法:

select name,
       diff,
       qujian [ 0 ] start,
       case when diff = 0 then qujian [ 0 ]
            when diff = 1 then qujian [ 1 ]
            when diff = 2 then qujian [ 2 ]
            when diff = 3 then qujian [ 3 ]
        end as endtime
  from (SELECT name,
               datediff(max(date), min(date)) diff,
               COLLECT_set(date) qujian
          from (select name, date, salary, date_sub(date, rank) as date2
                  from (select name,
                               date,
                               salary,
                               row_number() over(partition by name order by date) rank
                          from dw_htlbizdb.tmp_qh_liu_interview_data
                       ) a
               ) a
         group by name, date2
       ) a

 

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值