也就是:利用下一行的时间 减去上一行的时间

1,原始数据长这样: 根据需要保留分秒

usercode time1
8501 2019-07-24
8501 2019-07-25
8501 2019-07-30
8501 2019-08-01
8501 2019-08-02

2,最后需要的数据成这样: 在这里插入图片描述

3,怎么实现

select usercode,
time1,
ROW_NUMBER() OVER(PARTITION BY usercode ORDER BY time1) AS rank1,
LAG(time1,1) OVER(PARTITION BY usercode ORDER BY time1) AS time2
from 表1
;

4, gap 是下一步时间差做减法

select usercode,time1,rank1,time2 ,datediff(time1,time2)gap from(
select
usercode,
time1,
ROW_NUMBER() OVER(PARTITION BY usercode ORDER BY time1) AS rank1,
LAG(time1,1) OVER(PARTITION BY usercode ORDER BY time1) AS time2
from 表1 )a

– 可以改序号,或者里面填充
– LAG(daily,1,‘1970-01-01’) OVER(PARTITION BY usercode ORDER BY daily) AS last_1_time
– LAG(activatedtime,2) OVER(PARTITION BY usercode ORDER BY activatedtime) AS last_2_time

一个人有多行时间,需要每一行 时间与下一行时间间隔也就是:利用下一行的时间 减去上一行的时间1,原始数据长这样: 根据需要保留分秒usercode time1 8501 2019-07-24 8501 2019-07-25 8501 2019-07-30 8501 2019-08-01 8501 2019-08-022,最后需要的数据成这样:u...
1、 HIVE 多行 转多列 源数据样式 把CAMERA_NO,RESULT_DATA两列转换为CAMERA_NO字段的数据为列名,RESULT_DATA字段对应CAMERA_NO的数据为值 方法一:利用str_to_map函数 alter table ods.iot.iot_5060_iotdaq.5060_aac_mtf_meas_results_new add if not exists partition(date='{DATE}' ,hour='{HOUR}',minutes='{MINUTES}'); insert overwrite table ods.iot.iot_5060_io
1.1 hive 窗口函数 1.1.1了解哪些窗口函数,都是什么功能?找一个在某个业务中的应用? sum(col) over() : 分组对col累计求和,over() 中的语法如下count(col) over() : 分组对col累计,over() 中的语法如下min(col) over() : 分组对col求最小 max(col) over() : 分组求col的最大值 avg(col) ove...
参考链接:https://www.cnblogs.com/dqz19892013/arc hive /2013/04/11/3014239.html 以下的SQL全部在oracle数据库下执行,其他数据库是否支持这些函数,未知,有待验证。 1.DECODE() 该函数语法如下 DECODE(expression, if1, value1, if2,value2, if3,value3, . ....
Hive 比较特殊,计算两 时间 点相差分钟数据的方法是,先将两 时间 字符串转化成 时间 格式,然后两者 相减 ,再分别将小时、分钟、秒换算成分钟。 但是,计算两 时间 点相差的天数又比较简单,直接用datediff函数即可。 以下为SQL示例: --1)4月29日0:00~5月1日23:59期间,单次直播“迷你世界”游戏超过4小时的主播。 with tab_live_real as( select room_
今天在看 hive 日期 相减 函数的时候只发现了,datediff(),date_sub(),date_add()等函数可查看此链接,却没有发现保留精确值的函数。而当发现unix_timestamp()函数就会感觉计算会很简单。 通过 时间 戳(划算为秒)来计算保留日的精确值 select abs((unix_timestamp('2021-01-28 00:00:00') - unix_timestamp('2021-01-29 12:00:00'))/(3600*24)) `unix_timestamp