HIVE解决连续登录问题

HIVE解决连续登录问题

目录

HIVE解决连续登录问题

1.解决连续登录问题

如何去分析数据:            

2.需求:        

3.-- 间隔天数


1.解决连续登录问题

如何去分析数据:
            

1)查看数据的字段信息
            

2)需要查看每一行数据代表什么意思
 

create table learn5.deal_tb(id string,datestr string,amount string
)row format delimited fields terminated by ',';load data local inpath "/usr/local/soft/hive-3.1.2/data/deal_tb.txt" into table learn5.deal_tb;

2.需求:
        

统计用户

①连续交易的总额、
②连续登陆天数、
③连续登陆开始和结束时间、
④间隔天数等

    

连续交易的总额分析:
        

①什么是连续交易:用户每天都在交易
                

WITH sum_amount_table AS(
SELECT
T.id
,T.datestr
,SUM(amount) as sum_amount
FROM learn5.deal_tb T
GROUP BY T.id,T.datestr
)SELECT
id
,datestr
,sum_amount
, ROW_NUMBER() OVER(PARTITION BY id ORDER BY datestr) days
FROM sum_amount_table+-----+-------------+-------------+-------+
| id  |   datestr   | sum_amount  | days  |
+-----+-------------+-------------+-------+
| 1   | 2019-02-08  | 12461.55    | 1     |
| 1   | 2019-02-09  | 1052.99     | 2     |
| 1   | 2019-02-10  | 85.69       | 3     |
| 1   | 2019-02-12  | 769.85      | 4     |
| 1   | 2019-02-13  | 943.86      | 5     |
| 1   | 2019-02-14  | 538.42      | 6     |
| 1   | 2019-02-15  | 369.76      | 7     |
| 1   | 2019-02-16  | 369.76      | 8     |
| 1   | 2019-02-18  | 795.15      | 9     |
| 1   | 2019-02-19  | 715.65      | 10    |
| 1   | 2019-02-21  | 537.71      | 11    |
| 2   | 2019-02-08  | 12461.55    | 1     |
| 2   | 2019-02-09  | 1052.99     | 2     |
| 2   | 2019-02-10  | 85.69       | 3     |
| 2   | 2019-02-12  | 769.85      | 4     |
| 2   | 2019-02-13  | 943.86      | 5     |
| 2   | 2019-02-14  | 943.18      | 6     |
| 2   | 2019-02-15  | 369.76      | 7     |
| 2   | 2019-02-18  | 795.15      | 8     |
| 2   | 2019-02-19  | 715.65      | 9     |
| 2   | 2019-02-21  | 537.71      | 10    |
| 3   | 2019-02-08  | 12461.55    | 1     |
| 3   | 2019-02-09  | 1052.99     | 2     |
| 3   | 2019-02-10  | 85.69       | 3     |
| 3   | 2019-02-12  | 769.85      | 4     |
| 3   | 2019-02-13  | 943.86      | 5     |
| 3   | 2019-02-14  | 276.81      | 6     |
| 3   | 2019-02-15  | 369.76      | 7     |
| 3   | 2019-02-16  | 369.76      | 8     |
| 3   | 2019-02-18  | 795.15      | 9     |
| 3   | 2019-02-19  | 715.65      | 10    |
| 3   | 2019-02-21  | 537.71      | 11    |
+-----+-------------+-------------+-------+

我们创建一个表格 将查询语句的结果数据插入到里面 方便查询


CREATE TABLE continue_res (
id string 
,start_day STRING
,  continue_amount  STRING
,  continue_days STRING
,  continue_start STRING
, continue_end STRING
)
WITH sum_amount_table AS(
SELECT
T.id
,T.datestr
,SUM(amount) as sum_amount
FROM learn5.deal_tb T
GROUP BY T.id,T.datestr
)
, days_table AS (
SELECT
id
,datestr
,sum_amount
, ROW_NUMBER() OVER(PARTITION BY id ORDER BY datestr) days
FROM sum_amount_table
)
, date_sub_table AS(
SELECT
id
,datestr
,sum_amount
,days
,date_sub(datestr,days) start_day  --通过日期减去排序得到日期开始的天
FROM days_table
)
--连续登陆天数、连续登陆开始和结束时间
INSERT INTO TABLE  continue_res 
SELECT
id
,start_day
,sum(sum_amount) as continue_amount  -- 通过对起始天数一致的数据进行分组统计得到 连续交易的总额
,count(*) AS continue_days
,min(datestr) AS continue_start
,max(datestr) as continue_end
FROM date_sub_table
GROUP BY id,start_day

select * from continue_res;

SELECT
id
,continue_end
,LEAD(continue_start,1,current_date) OVER(PARTITION BY id ORDER BY start_day) as last_day
FROM continue_res

+-----+-------------+---------------------+----------------+-----------------+--------------                                -+
| id  |  start_day  |   continue_amount   | continue_days  | continue_start  | continue_end                                  |
+-----+-------------+---------------------+----------------+-----------------+--------------                                -+
| 1   | 2019-02-07  | 13600.23            | 3              | 2019-02-08      | 2019-02-10                                    |
| 1   | 2019-02-08  | 2991.6500000000005  | 5              | 2019-02-12      | 2019-02-16                                    |
| 1   | 2019-02-09  | 1510.8              | 2              | 2019-02-18      | 2019-02-19                                    |
| 1   | 2019-02-10  | 537.71              | 1              | 2019-02-21      | 2019-02-21                                    |
| 2   | 2019-02-07  | 13600.23            | 3              | 2019-02-08      | 2019-02-10                                    |
| 2   | 2019-02-08  | 3026.6499999999996  | 4              | 2019-02-12      | 2019-02-15                                    |
| 2   | 2019-02-10  | 1510.8              | 2              | 2019-02-18      | 2019-02-19                                    |
| 2   | 2019-02-11  | 537.71              | 1              | 2019-02-21      | 2019-02-21                                    |
| 3   | 2019-02-07  | 13600.23            | 3              | 2019-02-08      | 2019-02-10                                    |
| 3   | 2019-02-08  | 2730.04             | 5              | 2019-02-12      | 2019-02-16                                    |
| 3   | 2019-02-09  | 1510.8              | 2              | 2019-02-18      | 2019-02-19                                    |
| 3   | 2019-02-10  | 537.71              | 1              | 2019-02-21      | 2019-02-21                                    |
+-----+-------------+---------------------+----------------+-----------------+--------------                                -+

3.-- 间隔天数


LAG(col,n,default_val):往前第n行数据 
LEAD(col,n, default_val):往后第n行数据
 


SELECT
T1.id
,T1.continue_end
,T1.last_day
,datediff(T1.last_day,T1.continue_end)
FROM (
SELECT
id
,continue_end
,LEAD(continue_start,1,"2022-04-15") OVER(PARTITION BY id ORDER BY start_day) as last_day
FROM learn5.continue_res
) T1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697442.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【简单介绍下Milvus】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

01基础篇

1、初识 JVM 1.1 什么是 JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 Java源代码执行流程如下: 分为三个步骤: 编写Java源代码文件。使用…

数字化信息协同助力智能巡查,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机数字侦查场景下智能靶标检测识别系统

无人机的快速发展与普及,使得其进入千家万户各行各业,发挥着越来越重要的作用。随着科技的飞速发展,未来的数字信息化战场正逐渐展现出其独特的作战形态。在这个以数据和信息为主导的新战场上,无人机侦查手段与人工智能目标智能检…

template——模板进阶(C++)

在之前的文章中,介绍了模板初阶:Cpp_桀桀桀桀桀桀的博客-CSDN博客 在本篇中将会对模板进一步的讲解。本篇中的主要内容为:非类型模板参数、函数模板的特化、类模板的特化(其中包含全特化和偏特化),最后讲解…

每日一题11:Pandas:数据重塑-透视

一、每日一题 解答: import pandas as pddef pivotTable(weather: pd.DataFrame) -> pd.DataFrame:df_pivot weather.pivot(indexmonth, columnscity, valuestemperature)return df_pivot 题源:力扣 二、总结 Pandas 是一个强大的 Python 数据分析…

三更草堂前后端分离个人博客项目的开发笔记

文章目录 项目实战-前后端分离博客系统1.课程介绍2.创建工程3.博客前台3.0 准备工作3.1 SpringBoot和MybatisPuls整合配置测试 3.1 热门文章列表3.1.0 文章表分析3.1.1 需求3.1.2 接口设计3.1.3 基础版本代码实现3.1.4 使用VO优化3.1.5 字面值处理 3.2 Bean拷贝工具类封装3.2 查…

深入理解C#中的IO操作:Path类的详解

文章目录 前言一、Path类的概述二、Path类的主要方法2.1 Path.GetFullPath(string relativePath)2.2 Path.GetDirectoryName(string path)2.3 Path.GetFileName(string path)2.4 Path.GetFileNameWithoutExtension(string path)2.5 Path.GetExtension(string path)2.6 Path.Com…

ubuntu下使用docker安装es和kibana以及ik分词器还有logstash

友情提醒:es和kibana的版本最好一致 0.准备工作 mkdir -p /home/elasticsearch/data/ mkdir -p /home/elasticsearch/config/ mkdir -p /home/elasticsearch/plugins/ chmod -R 777 /home/elasticsearch 编写配置文件 echo http.host: 0.0.0.0 http.cors.ena…

二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序 1.二叉树的前序遍历 题目: 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入&#xff…

Typescript 哲学 - d.ts文件

The .d.ts syntax intentionally looks like ES Modules syntax. ES Modules was ratified by TC39 in 2015 as part of ES2015 (ES6), while it has been available via transpilers for a long time default export (esModuleInterop:true) / export 讲一个 d.ts export 的…

小程序的小组件

进度的组件 文字换行过滤 以及 排序 简单易懂 只为了记录工作 <template><div><ProgressBar :progress"progress" /><button click"increaseProgress">增加进度</button><view class"goods-name">12…

鸿蒙ArkUI开发:常用布局【主轴】

ArkUI中常用布局容器 线性布局&#xff08;Row/Column&#xff09; 线性布局的子元素在线性方向上&#xff08;水平方向和垂直方向&#xff09;依次排列线性布局容器包括[Row]和[Column]。Column容器内子元素按照垂直方向排列&#xff0c;Row容器内子元素按照水平方向排列开发…