zoukankan      html  css  js  c++  java
  • 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
    ;
    

      

  • 相关阅读:
    hdu 5504 GT and sequence
    解决:Incorrect line ending: found carriage return ( ) without corresponding newline ( )
    hdu 5501 The Highest Mark(贪心+01背包)
    web开发学习之路是否有尽头
    2016年后web开发趋势是什么?
    使用 jQuery Mobile 与 HTML5 开发 Web App 系列文章目录
    web开发微信文章目录
    现代web开发需要学习的15大技术
    移动前端重构实战系列
    什么鬼,又不知道怎么命名class了
  • 原文地址:https://www.cnblogs.com/yumengfei/p/12013646.html
Copyright © 2011-2022 走看看