在实际的业务中,我们会遇到取历史某一天为周几,类似的这样的问题,我这里提供一个方法。具体如下:

场景:取历史一年的数据,按周汇总,并且将每周汇总数据统计到周一对应的日期。(当然这里可以对应到任意周几)

数据存放在表:dw_db.tmp_data_info_week,数据格式如下:

下面提供具体的解决方法:

思路:1、求出上述日期对应周几,找出每一天所在周的周一和周日。

2、按照周一和周日进行汇总。

所用函数:pmod:正取余函数。pmod(int a, int b):返回正的a除以b的余数

datediff:计算两个日期之间相差的天数

注:

pmod(datediff(etd,'1920-01-01')-3,7)='0'  表示某天对应的周几,数值为0~6

IF(pmod(datediff(etd,'1920-01-01')-3,7)='0',7,pmod(datediff(etd,'1920-01-01')-3,7))表示:如果pmod(datediff(etd,'1920-01-01')-3,7)='0',则返回7,否则返回pmod(datediff(etd,'1920-01-01')-3,7),其目的是为了将周0转化成周7

详细代码如下:(这里方便书写,分了两步)

第一步:

--第一步:计算出每天对应的周几,以及该天所在周的周一和周日
USE dw_db;
DROP TABLE IF EXISTS dw_db.tmp_data_info_01;
CREATE TABLE dw_db.tmp_data_info_01 AS
SELECT a.*,CASE WHEN zhou=1 THEN date_add(etd,6)WHEN zhou=2 THEN date_add(etd,5)WHEN zhou=3 THEN date_add(etd,4)WHEN zhou=4 THEN date_add(etd,3)WHEN zhou=5 THEN date_add(etd,2)WHEN zhou=6 THEN date_add(etd,1) ELSE date_add(etd,0) END AS zhouri   --每周对应的周一,CASE WHEN zhou=1 THEN date_sub(etd,0)WHEN zhou=2 THEN date_sub(etd,1)WHEN zhou=3 THEN date_sub(etd,2)WHEN zhou=4 THEN date_sub(etd,3)WHEN zhou=5 THEN date_sub(etd,4)WHEN zhou=6 THEN date_sub(etd,5) ELSE date_sub(etd,6) END AS zhouyi   --每周对应的周日FROM (   SELECT etd,shagnhu,IF(pmod(datediff(etd,'1920-01-01')-3,7)='0',7,pmod(datediff(etd,'1920-01-01')-3,7)) as zhou  --得到周几,quantityFROM dw_db.tmp_data_info_week t ) a
; 

结果如下:

第二步:

--第二步:按照周一和周日汇总
SELECT effectdate,shagnhu,quantityFROM (   SELECT shagnhu,zhouyi        AS effectdate   --周一,zhouri        AS enddate      --周日,sum(quantity) AS quantity     --每周数据加总FROM dw_db.tmp_data_info_01GROUP BY shagnhu,zhouyi,zhouri ) a GROUP BY effectdate,shagnhu,quantity

结果如下:

以上就是解决该场景的全部代码,有更好的方法欢迎随时交流。谢谢~

hive中日期问题—取具体某一天为周几的方法及其应用相关推荐

  1. hive中日期格式转换

    hive中日期格式转换 日期时间格式大致分成时间戳和日期时间格式互转,字符串转化成日期时间格式,日期格式之间的转化 一.时间戳和日期互转 1.unix_timestamp函数,日期转时间戳 当函数参数 ...

  2. hive根据日期算哪一年的第几周(年周)以及算周几星期几

    一.取年周 按照习惯,跨年的周中的在哪一年的天数多就算哪一年的周,所以日期所在的年不一定是周所在的年,比如2016-01-01是2015年53周. 可以通过以下sql判断跨年的周属于哪一年,实现得到前 ...

  3. Hive中各种日期格式转换方法总结

    背景 日期计算平时在业务取数时经常涉及到,但是数据库中经常存放着不同的日期格式,有的存放是时间戳.有的是字符串等,这时需要对其进行转换才能提取到准确的数据,这里介绍的均是hive里面的函数功能,以下内 ...

  4. Java 中日期的几种常见操作 —— 取值、转换、加减、比较

    Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...

  5. hive获取月份_【Hive】Hive中常用日期函数整理

    前言 使用hive进行时间处理的过程中,有时忘记一些常用的函数用法,现整理一下hive中常用日期函数,当做备忘录使用,忘记来翻阅一下. 1 时间戳转化日期函数 时间戳必须是10位,默认情况下转化为'y ...

  6. Hive中分组取前N个值

    分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的 ...

  7. Hive中的常用的日期函数

    Hive中的日期函数to_date(string timestamp)**:返回时间字符串中的日期部分,如to_date('1970-01-01 00:00:00')='1970-01-01'curr ...

  8. hive中时间操作(一)

    转:https://blog.csdn.net/u012474716/article/details/78925319/ hive中常用的时间为时间戳和日期格式之间的转换 常用的函数为: to_dat ...

  9. hive中如何把13位转化为时间_重要知识点收藏 | Hive常用函数大全

    关系运算 1.等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive>select 1 from lxw_du ...

最新文章

  1. python3 graphviz入门教程
  2. windows 2003 下oracle从10.2.0.1升级到10.2.0.4
  3. mysql修改用户密码
  4. Laravel 中查询 where 记录
  5. 操作系统习题8—设备管理
  6. 怎么暂时关闭网站php,WordPress怎么临时关闭网站进行维护
  7. 【51单片机快速入门指南】5.3:SPI控制晶联讯JLX12864G_08602 LCD屏幕
  8. 关于H5工程师那些日常必需工具
  9. oracle反复查询一个集合,oracle集合查询
  10. Vue自定义属性的设置及获取
  11. 网易博客挂了,转一篇以前的文章过来纪念一下吧。。
  12. [Servlet] 初识Servlet
  13. 自己写段代码批量修改照片的Exif数据
  14. 前端开发者的必备好书:CSS世界三部曲,你都知道吗?
  15. BP反向传播算法推导
  16. Python的pyhanlp库使用(自然语言识别、姓名)
  17. 硬盘参数 PIO/DMA/UDMA/SWDMA/MWDMA
  18. 深信服网络挑战赛初赛_2019
  19. 智能车跟随圆弧路径原理
  20. MER:1.8万字带你系统了解宏组学实验与分析(高通量测序应用于病原体和害虫诊断——综述与实用性建议)...

热门文章

  1. 面试总结:新浪微博视频0914
  2. 计算机背小学英语吗,小学英语电脑版背单词软件哪个好_简单背单词软件
  3. 光伏“十三五”规划出炉:全新解析企业股市
  4. dnf单机版 不显示服务器,最新DNF70单机资源,70不悔终极版精修PVF+客户端+服务器一键端...
  5. 开发android蓝牙4.0 BLE低功耗应用的感受
  6. 分享一个旋钮插件 jquery.knob.js 新增change事件中回调返回值功能以及阻止冒泡事件
  7. 嵌入式Linux应用程序开发-(10)i.MX6UL基于嵌入式QT实现电容屏多点触控
  8. golang管道chan
  9. 异步时钟引起的亚稳态问题和跨时钟域电路设计
  10. XDOJ.70 C语言 Z字形扫描