sql 连续活跃天数

1. 背景

已知数据集为:
sql 连续活跃天数
目的:
计算每个uid的连续活跃天数,并且每一段活跃期内的开始时间和结束时间

2. 步骤

第一步:处理数据集
处理数据集,使其满足每个uid每个日期只有一条数据。
第二步:以uid为主键,按照日期进行排序,计算row_number.

SELECT  uid
          ,`征信查询日期`
          ,ROW_NUMBER() OVER(PARTITION BY uid ORDER BY `征信查询日期` ASC) AS `rn`
          ,first_value(`征信查询日期`)over(PARTITION BY uid ORDER BY `征信查询日期` ASC) `fir`
          ,first_value(`征信查询日期`)over(PARTITION BY uid ORDER BY `征信查询日期` desc) `las`
FROM   input

sql 连续活跃天数

两个关键点:

  1. 序号rn可以看做一直活跃的情况下,活跃日期最大值和活跃日期最小值之间的天数差。那么,日期最大值与日期最小值之差如果不等于序号,就表明中间有不连续。
  2. 用'征信查询日期' - rn 可以计算一列"关键列",连续时间段内,它的关键列值是一样的
select *,DATE_SUB(`征信查询日期`,`rn`) as `关键列` from (
SELECT  uid
          ,`征信查询日期`
          ,ROW_NUMBER() OVER(PARTITION BY uid ORDER BY `征信查询日期` ASC) AS `rn`
          ,first_value(`征信查询日期`)over(PARTITION BY uid ORDER BY `征信查询日期` ASC) `fir`
          ,first_value(`征信查询日期`)over(PARTITION BY uid ORDER BY `征信查询日期` desc) `las`
FROM   input)

sql 连续活跃天数
第三步:以uid和关键列作为主键。

select uid, `关键列`,count(*) as `连续活跃天数`, min(`征信查询日期`) as `活跃开始时间`, max(`征信查询日期`) as `活跃结束时间` from (
select *, DATE_SUB(`征信查询日期`,`rn`) as `关键列` from (
SELECT  uid
          ,`征信查询日期`
          ,ROW_NUMBER() OVER(PARTITION BY uid ORDER BY `征信查询日期` ASC) AS `rn`
          ,first_value(`征信查询日期`)over(PARTITION BY uid ORDER BY `征信查询日期` ASC) `fir`
          ,first_value(`征信查询日期`)over(PARTITION BY uid ORDER BY `征信查询日期` desc) `las`
FROM   input
  ) )group by uid, `关键列`

sql 连续活跃天数

原文链接:https://www.cnblogs.com/tian1022/p/17310496.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:sql 连续活跃天数 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • mysql存储过程之引发存储过程中的错误条件(SIGNAL和RESIGNAL语句)实例分析

    MySQL存储过程是MySQL所支持的一种特殊的PL/SQL语言,可以用于实现一些特定的业务逻辑。然而在实际的开发中,存储过程中难免会出现一些错误条件,需要我们及时进行处理。其中,SIGNAL和RESIGNAL语句就是两种常见的处理方式。 什么是SIGNAL和RESIGNAL语句 SIGNAL语句 SIGNAL语句用于引发一个异常,并将异常信息传递到存储过程…

    MySQL 2023年5月18日
    00
  • mysql innodb 异常修复经验分享

    MySQL InnoDB 异常修复经验分享 背景 MySQL作为开源社区最常用的关系型数据库之一,广泛应用于互联网行业。但是,InnoDB引擎下的MySQL还是存在一些异常情况,例如崩溃、误删等,这些异常往往会导致数据丢失和业务中断。因此,这篇文章将分享在修复MySQL InnoDB异常的过程中所需要的经验和方法。 注意事项 在修复MySQL InnoDB异…

    MySQL 2023年5月18日
    00
  • 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

    1.0 help == ? 帮助指令,查询某个指令的解释、用法、说明等。详情参考博文: 【数据库】6.0 MySQL入门学习(六)——MySQL启动与停止、官方手册、文档查询  https://www.cnblogs.com/xiaofu007/p/10301005.html  2.0 在cmd命令行中,输入“”ysql –help”,可以查看由mysql…

    MySQL 2023年4月12日
    00
  • MySQL的主从复制、延时从库、半同步复制

    1.主从复制简介 1)高可用2)辅助备份3)分担负载 复制是 MySQL 的一项功能,允许服务器将更改从一个实例复制到另一个实例。 1)主服务器将所有数据和结构更改记录到二进制日志中。2)从属服务器从主服务器请求该二进制日志并在本地应用其内容。3)IO:请求主库,获取上一次执行过的新的事件,并存放到relaylog4)SQL:从relaylog中将sql语句…

    MySQL 2023年4月12日
    00
  • MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法

    下面是关于“MySQL中(JOIN/ORDER BY)语句的查询过程及优化方法”的详细讲解攻略。 一、JOIN语句的查询过程及优化方法 1.1 JOIN语句的查询过程 JOIN语句是通过连接两张或多张表中的数据来产生结果的,它的查询过程主要分为以下两个步骤: 根据连接条件,从前面的表中查找符合条件的行; 对于前面查找出的每一行,在后面的表中查找符合条件的行,…

    MySQL 2023年5月19日
    00
  • MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)

    MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)这个错误信息通常表示MySQL在启动时无法找到日志文件 “./mysql-bin.index”, 并且错误代码 Errcode: 13 表示操作被拒绝。下面我来为大家介绍详细的解决方案。 确认错误原因 在开始修复问题之前,我们需要确认错误原因。可…

    MySQL 2023年5月18日
    00
  • MySQL的prepare使用及遇到bug解析过程

    下面我来详细讲解MySQL的prepare使用及遇到bug解析过程的攻略。 一、什么是MySQL的prepare 在MySQL中,prepare是用来预处理SQL语句的命令。使用prepare可以将一个SQL语句提交到MySQL服务器,同时告诉MySQL服务器将要传入的参数类型,这样就可以避免SQL注入攻击,同时也可以提高SQL语句的执行效率。 二、如何使用…

    MySQL 2023年5月18日
    00
  • 关于 MySQL 嵌套子查询中,无法关联主表字段问题的折中解决方法

    今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。 其实,问题的场景,非常简单: 就是需要查询出上图的数据,红框是从 项目产品表 中查询的2个字段,绿框是从与项目产品表关联的 文章表 中查询出的1个字段。我希望实现的效果是,获取到项目产品对应的文章提交人数,即该项目产品,有多少人提交了文章。看似很…

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部