Hsql每日一题 | day01

前言

就一直向前走吧,沿途的花终将绽放~

题目:找出连续活跃3天及以上的用户

sql 复制代码
create table t_useractive(
    uid   string,
    dt    string
);

insert into t_useractive
values('A','2023-10-01'),('A','2023-10-02'),('A','2023-10-03'),('A','2023-10-04'),
      ('B','2023-10-01'),('B','2023-10-03'),('B','2023-10-04'),('B','2023-10-05'),
      ('C','2023-10-01'),('C','2023-10-03'),('C','2023-10-05'),('C','2023-10-06'),
      ('D','2023-10-02'),('D','2023-10-03'),('D','2023-10-05'),('D','2023-10-06');

hsql:

sql 复制代码
select uid
from (
select  uid
from
    (select uid,dt,row_number() over (partition by uid order by dt)  rn,
             date_sub(dt, row_number() over (partition by uid order by dt)) c1
      from t_useractive
) t1 group by uid,c1
having count(*) >= 3
)
t2 group by uid;

hsql分析:

  1. 子查询 t1:

    • 从t_useractive表中选择uid、dt。
    • 使用row_number() over (partition by uid order by dt)为每个用户的活动记录分配一个行号(按照日期排序)。这个行号被命名为rn。
    • 接下来,计算一个名为c1的字段,该字段是日期dt减去行号rn的结果。这样做的目的是为了标记连续的日期,因为对于连续的日期,date_sub(dt, rn)的结果将是相同的。
  2. 子查询 t1 的分组:

    • 使用group by uid, c1对子查询t1的结果进行分组。由于c1字段对于连续的日期是相同的,因此这将把连续的日期记录分组在一起。
  3. having count(*) >= 3:

    • 筛选出那些组中记录数大于或等于3的组,这意味着这些组代表了连续3天或更多的活动。
  4. 外部查询 t2:

    • 由于内部查询已经筛选出了连续3天或更多的活动组,外部查询只需简单地按uid进行分组,并选择uid字段。这一步是为了确保每个用户只被列出一次,即使他们在不同的时间段内有多个连续的3天或更多天的活动。

最终,这个查询将返回所有在t_useractive表中至少有连续3天活动的用户的uid。

相关推荐
l1t8 分钟前
DeepSeek总结的PostgreSQL 中的 SQL 与 PL/pgSQL:计划缓存
sql·缓存·postgresql
bu_shuo18 分钟前
删除Windows资源管理器左侧【此电脑】的Linux企鹅图标
linux·windows
步行cgn19 分钟前
Spring MVC 删除功能:用隐藏表单模拟 DELETE 请求的完整解析
linux·运维·服务器
sun1536902757221 分钟前
金属超声波风速风向传感器原理、RS485 Modbus-RTU 采集与气象监测站集成方案
大数据
华为LTCITR专栏流程专家许浩明23 分钟前
ITR经验经典案例|服务ITR咨询|诚易达咨询公司许浩明团队辅导杰克科技服务ITR变革
大数据·人工智能·科技
涛思数据(TDengine)28 分钟前
支撑药企全球化合规:TDengine 发布中美欧三地监管对照白皮书
大数据·数据库·人工智能·ai·tdengine
棣廷42 分钟前
初识Hive(2)
数据仓库·hive·hadoop
skywalk81631 小时前
deepseek对skywalk163/hive 和hivecommons/hive 两个多机AI Agent任务调度项目的对比
人工智能·hive·agent
宁波阿成1 小时前
CentOS 7 环境下 Tomcat 8.5 升级至 9.0.123 操作总结
linux·centos·tomcat
NineData1 小时前
NineData 社区版 V5.4.0 上线:715 条复制对比链路,AI Agent 新增表结构设计发布能力
大数据·数据库·人工智能·mysql·数据库管理工具·ninedata·数据库迁移工具