也就是:利用下一行的时间 减去上一行的时间
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