HiveSQL中date_sub的用法


 

语法:

VARCHAR DATE_SUB(VARCHAR startdate, INT days)
VARCHAR DATE_SUB(TIMESTAMP time, INT days) 

参数:

参数 数据类型

startdate 

VARCHAR
time TIMESTAMP
days INT

 

 

 

 

 

 

 

定义:返回startdate减去days天数的日期。返回VARCHAR类型的yyyy-MM-dd日期格式。若有参数为null或解析错误,返回null。

测试案例:

SELECT DATE_SUB(date1, 30) as var1,
 DATE_SUB(TIMESTAMP '2017-10-15 23:00:00',30) as var2,
 DATE_SUB(nullstr,30) as var3
FROM T1

  

测试结果:

var1(VARCHAR) var2(VARCHAR) var3(VARCHAR)
2017-09-15 2017-09-15 null

 

 

场景案例:

-- 编写连续7天登录的总人数

 

t1表
Uid dt login_status(1登录成功,0异常)
1 2019-07-11 1
1 2019-07-12 1
1 2019-07-13 1
1 2019-07-14 1
1 2019-07-15 1
1 2019-07-16 1
1 2019-07-17 1
1 2019-07-18 1
2 2019-07-11 1
2 2019-07-12 1
2 2019-07-13 0
2 2019-07-14 1
2 2019-07-15 1
2 2019-07-16 0
2 2019-07-17 1
2 2019-07-18 0
3 2019-07-11 1
3 2019-07-12 1
3 2019-07-13 1
3 2019-07-14 1
3 2019-07-15 1
3 2019-07-16 1
3 2019-07-17 1
3 2019-07-18 1

-- 建表
create table if not exists c_t1(
uid int,
dt string,
login_status int
)
row format delimited fields terminated by ' '
;


-- 导入数据
load data local inpath '/opt/datas/t1.txt' into table c_t1;

-- 思路一
select
uid,
dt,
row_number() over(distribute by uid sort by dt) rm
from c_t1
where login_status = 1
;  t1 

-- 思路二
select 
t.uid,
date_sub(t1.dt,dt.rm) dt
from
(
select
uid,
dt
row_number() over(distribute by uid sort by dt) rm
from c_t1
where login_status = 1
)t1
; t2

-- 思路三
select
uid,
dt
from
(
select 
t1.uid,
date_sub(t1.dt,t1.rm) dt
from
(
select
uid,
dt,
row_number() over(distribute by uid sort by dt) rm
from c_t1
where login_status = 1
)t1
)t2
group by 
uid,
dt
having 
count(uid) > 7
;

 

 

 

  

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM