原始数据(店铺名称, 销售时间, 销售金额)

a,2020-02-05,200
a,2020-02-06,300
a,2020-02-07,200
a,2020-02-08,400
a,2020-02-10,600
a,2020-03-01,200
a,2020-03-02,300
a,2020-03-03,200
a,2020-03-04,400
a,2020-03-05,600
b,2020-02-05,200
b,2020-02-06,300
b,2020-02-08,200
b,2020-02-09,400
b,2020-02-10,600
c,2020-01-31,200
c,2020-02-01,300
c,2020-02-02,200
c,2020-02-03,400
c,2020-02-10,600

在hive中建表

create table shop(
name string ,
ctime string ,
money int
)
row format delimited fields terminated by "," ;
load data local inpath "/doit16/shop.txt" into table shop ;

需求: 查找连续三天又销售记录的店铺名称

分析:
1.将店铺按名称分区, 时间排序 ,并编号

select
* ,
row_number() over(partition by name order by ctime) as rn
from
shop

此时得到的表结果如下:

2.用ctime字段的值减去后面的编号,这里用date_sub()函数 会得到一个结果, 如果两条数据的结果相同, 则说明他们是连续的两天的购买数据

select
name,
ctime,
money,
rn,
date_sub(ctime,rn)  date_sub_res
from
(select
* ,
row_number() over(partition by name order by ctime) as rn
from
shop) t

查询结果:

3.按照name, date_sub_res分组

select
name,
date_sub_res,
count(*) cc
from
(select
name,
ctime,
money,
rn,
date_sub(ctime,rn)  date_sub_res
from
(select
* ,
row_number() over(partition by name order by ctime) as rn
from
shop) t1) t2
group by name,date_sub_res

查询结果:

4.筛选出cc > 3 的数据, 并对name去重, 所得结果就是连续3天就销售记录的店铺

select
distinct(name)
from
(select
name,
date_sub_res,
count(*) cc
from
(select
name,
ctime,
money,
rn,
date_sub(ctime,rn)  date_sub_res
from
(select
* ,
row_number() over(partition by name order by ctime) as rn
from
shop) t1) t2
group by name,date_sub_res) t3
where cc > 3;

查询结果:

Hive窗口函数练习题(连续三天以上有销售记录的店铺)相关推荐

  1. hive窗口函数练习题

    一.第一套练习 需求: 1.求用户明细并统计每天的用户总数 2.计算从第一天到现在的所有 score 大于80分的用户总数 3.计算每个用户到当前日期分数大于80的天数 test_window.txt ...

  2. Hive面试题系列1: 求连续三天购买指定需求

    1.数据源 cat /home/root/order.txt 001 zs p001 2020-02-04 002 zs p005 2020-03-05 003 zs p006 2020-03-06 ...

  3. HiveQL学习笔记(四):Hive窗口函数

    本系列是本人对Hive的学习进行一个整理,主要包括以下内容: 1.HiveQL学习笔记(一):Hive安装及Hadoop,Hive原理简介 2.HiveQL学习笔记(二):Hive基础语法与常用函数 ...

  4. hive窗口函数使用

    hive窗口函数的使用 前言 一.hive窗口函数语法 1.over()窗口函数的语法结构 1.1.over()函数中的三个函数讲解 2.常与over()一起使用的分析函数 2.1.聚合类 2.2.排 ...

  5. Hive窗口函数小结

    文章目录 一.窗口函数作用 1.1.测试数据 1.2.应用场景 二.窗口函数概念 2.1.语法结构 2.2.分析函数 2.3.over函数的参数 三.窗口函数入门 3.1.over(partition ...

  6. hive 窗口函数(持续更新)

    hive窗口函数语法 avg().sum().max().min()等是分析函数,而over()才是窗口函数,下面我们来看看over()窗口函数的语法结构.及常与over()一起使用的分析函数: 1. ...

  7. Shell 练习题(三)

    Shell 练习题(三) 1.软链接和硬链接有什么区别 2.判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下 3.对文件test.txt找出行尾结束为小数点的行,并统计行数 4.写一个 ...

  8. 【指标计算】Spark 统计连续三天下单且下单额保持增长的用户

    文章目录 需求说明 数据集 需求分析 需求实现 -- Spark SQL API 需求实现 -- Spark SQL 需求说明 统计连续三天下单且下单金额保持增长(第一天 < 第二天 < ...

  9. HIVE 窗口函数和分析函数

    **HIVE 窗口函数和分析函数** 第一篇,试试水: 一.介绍 分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行. 开窗函数指定了分析 ...

最新文章

  1. ffmpeg使用总结
  2. python中简述对象和类的关系_Python学习笔记(七)对象和类
  3. Linux系统调用的运行过程【转】
  4. 华清远见java考试题_Java面试题,你能答对几个?
  5. 【C/C++】值传递和址传递区别解析
  6. ?php echo $this_php如何使用echo输出常量+变量?
  7. [OpenGL] 斯坦福兔子与显示列表
  8. win10u盘被写保护怎么解除_Win10系统下U盘写保护应该如何破除!
  9. 提升幸福感的100件小事
  10. 七月阅读:《刘慈欣科幻短篇小说集Ⅰ》笔记
  11. Python+Kivy(App开发)从入门到实践
  12. java http 1.1_HTTP1.1翻译 - 彪悍的人生不需要解释 - BlogJava
  13. sql连表查询、子查询、组合查询
  14. ant notification通知框 内容支持html标签
  15. 必应壁纸php,PHP版Bing壁纸下载源码
  16. matlab ewt使用方法,ewt升学e网通怎么使用,ewt升学e网通使用解析
  17. 数字滚动(微信小程序)
  18. 【厚积薄发系列】C++项目总结8—全自动和半自动随机生成中文字符串
  19. 为什么我从Flutter转投Electron的怀抱?
  20. 精益思想—人、过程和技术的集成(zt)

热门文章

  1. openerp js调用Python类方法
  2. Python 高级编程
  3. 第三方支付业务处理流程
  4. android下提取PPS,SPS
  5. 原森态、慢生活 从柏厨集成家居北纬60°洞察现代青年的城市生活
  6. Nginx给minio分布式做负载均衡进入管理界面查看桶一直显示loading
  7. 小米8探索版android版本,小米 8 透明探索版,首款 Android Face ID 手機,支援螢幕下指紋辨識...
  8. linux忘记密码,如何修改密码
  9. oracle revoke 列_Oracle常见授权与回收权限——grant和revoke
  10. R语言使用epiDisplay包的tabpct函数生成二维列联表并使用马赛克图可视化列联表(二维列联表、边际频数、以及按行、按列的比例)、自定义设置cex.axis参数改变轴标签数值的大小