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;
相关推荐
lkbhua莱克瓦241 小时前
进阶-SQL优化
java·数据库·sql·mysql·oracle
石小千1 小时前
Myql binlog反向解析成sql
数据库·sql
鲨莎分不晴2 小时前
大数据的“数字金库”:HDFS 核心原理与操作指令全解
大数据·hadoop·hdfs
摩西蒙2 小时前
阿里云 MaxCompute(原 ODPS)定时任务查询库存快照场景
java·大数据·sql·database
鲨莎分不晴3 小时前
给 Hadoop 插上 SQL 的翅膀:Apache Hive 架构与实战全解
hadoop·sql·apache
德彪稳坐倒骑驴3 小时前
Hive电商数据分析项目 过程记录
hive·hadoop·数据分析
红队it3 小时前
【Spark+Hadoop】基于spark+hadoop游戏评论数据分析可视化大屏(完整系统源码+数据库+开发笔记+详细部署教程+虚拟机分布式启动教程)✅
大数据·hadoop·分布式·算法·游戏·数据分析·spark
yumgpkpm3 小时前
华为 GaussDB 商业版(本地部署)部署方案及相关步骤
hive·hadoop·redis·elasticsearch·华为·kafka·gaussdb
独自归家的兔3 小时前
Ambari与Bigtop深度解析:大数据集群管理与生态标准化利器
大数据·hadoop·ambari
俊哥大数据4 小时前
【项目8】基于Hadoop+Hive+SpringBoot+Vue智慧社区大数据仓库项目
数据仓库·hive·hadoop