Hive_sql如何计算连续签到天数

在a表中有id和date两列,记录用户当天是否签到,想查询出哪些用户连续签到了3天(或连续签到更多天,是连续签到)

(1) 先开窗,排个序:

sql 复制代码
select user_id, login_time,
row_number() over(partition by user_id order by login_time) num 
from login_log;

开完窗的结果如下:

(2) 利用等差数列的特性,如果是连续登录,login_time - num 则相等,因此可以这样写:

sql 复制代码
select t.user_id, 
    t.login_time, 
    date_sub(login_time, INTERVAL t.num DAY) date_rslt
from 
(
    select user_id, login_time, 
    row_number() over(partition by user_id order by login_time) num 
    from login_log
) t;

注:INTERVAL 关键字可以用于计算时间间隔, date_sub(login_time, INTERVAL t.num DAY)表示登录时间减去 num 天; 若 DAY 改成 HOUR 表示减去 num 小时。

以上 SQL 执行后得到:

(3)分组后可获得结果:

sql 复制代码
select a.user_id,
    a.date_rslt,
    count(1) as cnt
from(
    select 
        t.user_id, 
        t.login_time,
        date_sub(login_time, INTERVAL t.num DAY) date_rslt
    from 
        (
        select user_id, 
        login_time, 
        row_number() over(partition by user_id order by login_time) num 
        from login_log
        ) t
) a
group by a.user_id, a.date_rslt;
相关推荐
WL_Aurora3 小时前
Sqoop数据迁移工具从入门到精通
hive·hadoop·sqoop
蜀道山老天师3 小时前
Prometheus监控Hadoop集群(实操完整版,含避坑指南)
大数据·linux·运维·hadoop·云原生·prometheus
TE-茶叶蛋13 小时前
DBeaver 的Explain 执行计划,分析sql的性能
数据库·sql
麦聪聊数据14 小时前
数据 API 平台选型:深度解读数据服务的四大关键技术与架构底座
数据库·sql
拾起零碎18 小时前
U8/材料出库单触发器,有条件的修改出库类别
sql
敲代码的嘎仔19 小时前
力扣高频SQL基础50题详解
开发语言·数据库·笔记·sql·算法·leetcode·后端开发
TE-茶叶蛋20 小时前
sql优化思维
数据库·sql
打小就很皮...21 小时前
基于 Python + LangChain + SQL 生成自动查询数据实战
数据库·sql·langchain
这个DBA有点耶1 天前
某银行核心系统从Oracle迁移到国产数据库全程复盘(DBA视角)
数据库·经验分享·sql·oracle·dba·智能硬件
静小谢1 天前
sql笔记
spring boot·笔记·sql·mybatis