HiveSQL小练习--求连续消费的天数
数据格式:
1 2019-02-08 6214.23
1 2019-02-08 6247.32
1 2019-02-09 85.63
1 2019-02-09 967.36
1 2019-02-10 85.69
1 2019-02-12 769.85
1 2019-02-13 943.86
1 2019-02-14 538.42
1 2019-02-15 369.76
1 2019-02-16 369.76
1 2019-02-18 795.15
1 2019-02-19 715.65
1 2019-02-21 537.71
2 2019-02-08 6214.23
2 2019-02-08 6247.32
2 2019-02-09 85.63
2 2019-02-09 967.36
2 2019-02-10 85.69
2 2019-02-12 769.85
2 2019-02-13 943.86
2 2019-02-14 943.18
2 2019-02-15 369.76
2 2019-02-18 795.15
2 2019-02-19 715.65
2 2019-02-21 537.71
3 2019-02-08 6214.23
3 2019-02-08 6247.32
3 2019-02-09 85.63
3 2019-02-09 967.36
3 2019-02-10 85.69
3 2019-02-12 769.85
3 2019-02-13 943.86
3 2019-02-14 276.81
3 2019-02-15 369.76
3 2019-02-16 369.76
3 2019-02-18 795.15
3 2019-02-19 715.65
3 2019-02-21 537.71
建表语句:
create table deal_tb(
id string
,datestr string
,amount string
)row format delimited fields terminated by ‘,’;
需求以及结果样式:
需求:比如原数据中8号、9号、10号都进行了消费,就算做是连续消费,算是一组数据,但11号没有消费,12号进行了消费,那十二号之后的连续消费算作下一组
答案:
1.先是按照id号和日期进行分组,在对消费做一个求和
select id,datestr,sum(amount) as sum_amount
from deal_tb
group by id,datestr
2.按照id号分组,日期排序打上一个标签
select t1.id
,t1.datestr
,t1.sum_amount
,row_number() over(partition by id order by datestr) as rn
from(
select id
,datestr
,sum(amount) as sum_amount
from deal_tb
group by id,datestr
) t1
3.拿前面的时间减去后面的标签,连续消费的记录就会被标记到一起,都是一样的,就是一个区
select tt1.id
,tt1.datestr
,tt1.sum_amount
,date_sub(tt1.datestr,rn) as grp
from(
select t1.id
,t1.datestr
,t1.sum_amount
,row_number() over(partition by id order by datestr) as rn
from(
select id
,datestr
,sum(amount) as sum_amount
from deal_tb
group by id,datestr
) t1
) tt1
4.加上连续消费的天数,以及连续消费了哪几天
select ttt1.id
,ttt1.grp
,round(sum(ttt1.sum_amount),2) as sc_sum_amount
,count(1) as sc_days
,min(ttt1.datestr) as sc_start_date
,max(ttt1.datestr) as sc_end_date
from(
select tt1.id
,tt1.datestr
,tt1.sum_amount
,date_sub(tt1.datestr,rn) as grp
from(
select t1.id
,t1.datestr
,t1.sum_amount
,row_number() over(partition by id order by datestr) as rn
from(
select id
,datestr
,sum(amount) as sum_amount
from deal_tb
group by id,datestr
) t1
) tt1
) ttt1
group by ttt1.id,ttt1.grp;
感谢阅读,我是啊帅和和,一位大数据专业大四学生,祝你快乐。
HiveSQL小练习--求连续消费的天数相关推荐
- 大数据练习题mysql之求连续出勤和连续最大登陆天数
某APP活跃用户,字段uid和dt两个字段,求连续出勤天数大于等于三天的用户和用户最大登录天数 求连续出勤天数,使用row_number()方法: SELECT a.uid,DATE_SUB(a.dt ...
- php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法
本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...
- Sql如何统计连续打卡天数
总第208篇/张俊红 今天来解一道题面试中可能经常会被一些面试官拿来"刁难"的题,就是<如何统计连续打卡天数>,当然了这里面的打卡可以换成任意其他行为,比如连续登陆天数 ...
- 数学--数论--费马小定理+求逆元
1.费马小定理: (此处的p为素数) 证明: 费马小定理求逆元 如果p为小素数我们选择直接暴力,时间复杂度为: int Fermat_inverse(int a,int mod) {int res = ...
- 大文件拆分小文件求top_将文件拆分为流
大文件拆分小文件求top 上周,我讨论了类Pattern新的(@since 1.8)方法splitAsStream只能根据流的需要从字符序列中读取字符序列,并且不能继续进行模式匹配以创建所有可能的元素 ...
- ny225 小明求素数积
小明求素数积 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 小明最近遇到了一个素数题,是给你一个正整数N(2=<N<=1000)让你求出2~N的所有素数乘积 ...
- 计算连续登陆最大天数
计算连续登陆最大天数 原始数据: u0001 2019-10-10 u0001 2019-10-11 u0001 2019-10-12 u0001 2019-10-14 u0001 2019-10-1 ...
- 洛谷 [P1593 因子和] {快速幂+费马小定理求逆元+求解质因子} 奋斗的珂珂~
题目描述 输入两个整数 a 和 b,求 aba^bab 的因子和. 由于结果太大,只要输出它对 9901 取模的结果. 输入格式 仅一行,为两个整数 a和 b. 输出格式 输出一行一个整数表示答案对 ...
- c语言编写一个程序计算某年某月有几天,c语言编写程序,输入某年某月,求该月的天数...
c语言编写程序,输入某年某月,求该月的天数 #包括 voidmain() { 年.月.日: 请输入当前日期(年月以空格分隔): ': 中国年月 而(月=0 | |月12) { cout '输入时间有误 ...
- 造车新势力排名更新:小鹏汽车连续2个月破万,蔚来汽车掉队?
11月1日,国内多家造车新势力品牌公布2021年10月交付数据.其中,小鹏汽车以10138台的交付量登顶造车新势力月销榜榜首,而蔚来汽车则仅交付了3667台,排名掉至第五. 相比之下,哪吒汽车以810 ...
最新文章
- 博客园今天早上是不是出现什么问题了?
- Call From hadoop102/192.168.121.102 to hadoop102:9000 failed on connection exception
- 一致性hash算法简介
- java中什么表示菜单项_下列类型中,表示菜单项的是( )。_学小易找答案
- ITK:用高斯核计算平滑
- 『Python × C++』函数传参机制学习以及对比
- java中解决脏读_多线程出现脏读以及解决方法(使用synchronized)
- python进阶10 MySQL补充 编码、别名、视图、数据库修改
- 深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建
- 用户'sa'登录失败(错误18456)解决方案图解
- 在Ubuntu 18.04 LTS 入门 ROS Melodic 机器人 操作系统
- urdf与xacro的使用方法 机械臂模型仿真示例
- 用Word做一个漂亮的网页
- word背景图片设置a4纸大小教程
- python xlrd获取excel行数_Python 使用xlrd库读取excel,获取最大行和最大列等
- 新能源汽车智能化,集度先行一步
- 一个c语言源文件可以包含两个以上main,二级C语言习题汇总及标准答案.doc
- VirtualBox 虚拟机系统的三种启动方式
- 千寻位置千寻知寸测试
- 振弦式渗压计渗流孔隙水压立计应用地基内部渗透水压力