数据格式:
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小练习--求连续消费的天数相关推荐

  1. 大数据练习题mysql之求连续出勤和连续最大登陆天数

    某APP活跃用户,字段uid和dt两个字段,求连续出勤天数大于等于三天的用户和用户最大登录天数 求连续出勤天数,使用row_number()方法: SELECT a.uid,DATE_SUB(a.dt ...

  2. php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法

    本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...

  3. Sql如何统计连续打卡天数

    总第208篇/张俊红 今天来解一道题面试中可能经常会被一些面试官拿来"刁难"的题,就是<如何统计连续打卡天数>,当然了这里面的打卡可以换成任意其他行为,比如连续登陆天数 ...

  4. 数学--数论--费马小定理+求逆元

    1.费马小定理: (此处的p为素数) 证明: 费马小定理求逆元 如果p为小素数我们选择直接暴力,时间复杂度为: int Fermat_inverse(int a,int mod) {int res = ...

  5. 大文件拆分小文件求top_将文件拆分为流

    大文件拆分小文件求top 上周,我讨论了类Pattern新的(@since 1.8)方法splitAsStream只能根据流的需要从字符序列中读取字符序列,并且不能继续进行模式匹配以创建所有可能的元素 ...

  6. ny225 小明求素数积

    小明求素数积 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 小明最近遇到了一个素数题,是给你一个正整数N(2=<N<=1000)让你求出2~N的所有素数乘积 ...

  7. 计算连续登陆最大天数

    计算连续登陆最大天数 原始数据: u0001 2019-10-10 u0001 2019-10-11 u0001 2019-10-12 u0001 2019-10-14 u0001 2019-10-1 ...

  8. 洛谷 [P1593 因子和] {快速幂+费马小定理求逆元+求解质因子} 奋斗的珂珂~

    题目描述 输入两个整数 a 和 b,求 aba^bab 的因子和. 由于结果太大,只要输出它对 9901 取模的结果. 输入格式 仅一行,为两个整数 a和 b. 输出格式 输出一行一个整数表示答案对 ...

  9. c语言编写一个程序计算某年某月有几天,c语言编写程序,输入某年某月,求该月的天数...

    c语言编写程序,输入某年某月,求该月的天数 #包括 voidmain() { 年.月.日: 请输入当前日期(年月以空格分隔): ': 中国年月 而(月=0 | |月12) { cout '输入时间有误 ...

  10. 造车新势力排名更新:小鹏汽车连续2个月破万,蔚来汽车掉队?

    11月1日,国内多家造车新势力品牌公布2021年10月交付数据.其中,小鹏汽车以10138台的交付量登顶造车新势力月销榜榜首,而蔚来汽车则仅交付了3667台,排名掉至第五. 相比之下,哪吒汽车以810 ...

最新文章

  1. 博客园今天早上是不是出现什么问题了?
  2. Call From hadoop102/192.168.121.102 to hadoop102:9000 failed on connection exception
  3. 一致性hash算法简介
  4. java中什么表示菜单项_下列类型中,表示菜单项的是( )。_学小易找答案
  5. ITK:用高斯核计算平滑
  6. 『Python × C++』函数传参机制学习以及对比
  7. java中解决脏读_多线程出现脏读以及解决方法(使用synchronized)
  8. python进阶10 MySQL补充 编码、别名、视图、数据库修改
  9. 深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建
  10. 用户'sa'登录失败(错误18456)解决方案图解
  11. 在Ubuntu 18.04 LTS 入门 ROS Melodic 机器人 操作系统
  12. urdf与xacro的使用方法 机械臂模型仿真示例
  13. 用Word做一个漂亮的网页
  14. word背景图片设置a4纸大小教程
  15. python xlrd获取excel行数_Python 使用xlrd库读取excel,获取最大行和最大列等
  16. 新能源汽车智能化,集度先行一步
  17. 一个c语言源文件可以包含两个以上main,二级C语言习题汇总及标准答案.doc
  18. VirtualBox 虚拟机系统的三种启动方式
  19. 千寻位置千寻知寸测试
  20. 振弦式渗压计渗流孔隙水压立计应用地基内部渗透水压力

热门文章

  1. 【为什么电脑插上HDMI线之后,电脑没有了声音解决方案】
  2. 【零基础学Python】Day10 Python解释器
  3. 数字代理在持续由内而外重塑创新
  4. vue显示PDF文件
  5. 百度地图Android开发清除上一次驾车导航路线
  6. unity导入Standard Assets出现错误
  7. 服务器1m带宽文件上传好慢,为什么10m光纤宽带上传速度只有1m还不到2m
  8. 如何巧妙应用shift键的解说
  9. 一个咖啡杯装下全世界的数据,DNA存储芯片神奇在哪?
  10. 让你的应用支持新iPad的Retina显示屏