当前位置: 首页 > article >正文

【Hive sql面试题】找出连续活跃3天及以上的用户

表数据如下:

在这里插入图片描述

要求:求出连续活跃三天及以上的用户

在这里插入图片描述

建表语句和插入数据如下:

create table t_useractive(
    uid   string,
    dt    string
);


insert into t_useractive
values('A','2023-10-01 10:10:20'),('A','2023-10-02 10:10:20'),('A','2023-10-03 10:16:20'),('A','2023-10-04 10:16:20'),
      ('B','2023-10-01 12:10:25'),('B','2023-10-03 12:10:25'),('B','2023-10-04 18:10:25'),('B','2023-10-05 18:10:25'),
      ('C','2023-10-01 10:20:20'),('C','2023-10-03 10:20:20'),('C','2023-10-05 12:21:24'),('C','2023-10-06 13:11:24'),
      ('D','2023-10-02 12:10:20'),('D','2023-10-03 12:10:20'),('D','2023-10-05 13:12:29'),('D','2023-10-06 15:10:20');

解题思路和答案

核心:

根据uid和 年月日 分组之后(目的是排除同一个用户在同一天登录了多次的情况),下一条数据登录时间与本条数据登 录时间间隔为一天就代表连续登录

思路:

1、根据id和 substr(dt,1,10) 分组(排除同一个用户在同一天登录了多次的情况)

2、根据 substr(dt,1,10) 进行排名(这里排除同一个用户在同一天登录了多次的情况,所以row_number()、rank() 和 dense_rank() 都可以使用)

3、将日期和排名之后的数字相减(使用 date_sub() ),得到一个新的日期

4、如果这个新的日期出现三次及以上,就代表连续登录三天及以上(根据新的日期分组 count() )

代码:

with t as (
    select uid,substr(dt,1,10) dt1,row_number() over (partition by uid order by substr(dt,1,10)) day 
    from t_useractive group by uid,substr(dt,1,10)
)
select uid from t group by date_sub(dt1,day),uid having count(*) >= 3;

http://www.kler.cn/a/374113.html

相关文章:

  • Cloud Compare学习笔记
  • 无人机敏捷反制技术算法详解!
  • 【C++动态规划】有效括号的嵌套深度
  • facebook账号类型有哪些?
  • android 12 禁止三方APP 使用API 直接打开wifi的修改方法
  • MySQL分层结构由哪些组成?
  • 用示波器如何调方波?
  • GitHub个人主页美化
  • 【Paper Note】利用Boundary-aware Attention边界感知注意力机制增强部分伪造音频定位
  • Java | Leetcode Java题解之第523题连续的子数组和
  • linux之netlink 内核源码分析
  • 【K8S系列】Kubernetes LoadBalancer 类型的 Service 未分配 IP 地址排查步骤及命令执行结果分析
  • 从壹开始解读Yolov11【源码研读系列】——Data.Augment.py:数据增强模块第四部分——Format标签格式标准化操作
  • C++刷怪笼(9)继承
  • vscode摸鱼学习插件开发
  • Rust 力扣 - 2379. 得到 K 个黑块的最少涂色次数
  • Kubernetes——part8-2 k8s集群存储解决方案 GlusterFS
  • CST软件如何理解Axial Ratio轴比
  • 【论文速读】Optimization-based Prompt Injection Attack to LLM-as-a-Judge
  • 【AI工作流】FastGPT - 深入解析FastGPT工作流编排:从基础到高级应用的全面指南
  • ESP8266 连接 MQTT 服务器EMQX 连接MQTTX
  • 【分布式技术】分布式序列算法Snowflake深入解读
  • (蓝桥杯C/C++)——STL(下)
  • Vue-cli之库模式以及模块化的魅力 - - 【UMD】
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-9
  • Django后台接口开发