hive中日期问题—取具体某一天为周几的方法及其应用
在实际的业务中,我们会遇到取历史某一天为周几,类似的这样的问题,我这里提供一个方法。具体如下:
场景:取历史一年的数据,按周汇总,并且将每周汇总数据统计到周一对应的日期。(当然这里可以对应到任意周几)
数据存放在表: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中日期问题—取具体某一天为周几的方法及其应用相关推荐
- hive中日期格式转换
hive中日期格式转换 日期时间格式大致分成时间戳和日期时间格式互转,字符串转化成日期时间格式,日期格式之间的转化 一.时间戳和日期互转 1.unix_timestamp函数,日期转时间戳 当函数参数 ...
- hive根据日期算哪一年的第几周(年周)以及算周几星期几
一.取年周 按照习惯,跨年的周中的在哪一年的天数多就算哪一年的周,所以日期所在的年不一定是周所在的年,比如2016-01-01是2015年53周. 可以通过以下sql判断跨年的周属于哪一年,实现得到前 ...
- Hive中各种日期格式转换方法总结
背景 日期计算平时在业务取数时经常涉及到,但是数据库中经常存放着不同的日期格式,有的存放是时间戳.有的是字符串等,这时需要对其进行转换才能提取到准确的数据,这里介绍的均是hive里面的函数功能,以下内 ...
- Java 中日期的几种常见操作 —— 取值、转换、加减、比较
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...
- hive获取月份_【Hive】Hive中常用日期函数整理
前言 使用hive进行时间处理的过程中,有时忘记一些常用的函数用法,现整理一下hive中常用日期函数,当做备忘录使用,忘记来翻阅一下. 1 时间戳转化日期函数 时间戳必须是10位,默认情况下转化为'y ...
- Hive中分组取前N个值
分享两篇文章,结合看更清楚一点. 背景 假设有一个学生各门课的成绩的表单,应用hive取出每科成绩前100名的学生成绩. 这个就是典型在分组取Top N的需求. 解决思路 对于取出每科成绩前100名的 ...
- Hive中的常用的日期函数
Hive中的日期函数to_date(string timestamp)**:返回时间字符串中的日期部分,如to_date('1970-01-01 00:00:00')='1970-01-01'curr ...
- hive中时间操作(一)
转:https://blog.csdn.net/u012474716/article/details/78925319/ hive中常用的时间为时间戳和日期格式之间的转换 常用的函数为: to_dat ...
- hive中如何把13位转化为时间_重要知识点收藏 | Hive常用函数大全
关系运算 1.等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive>select 1 from lxw_du ...
最新文章
- python3 graphviz入门教程
- windows 2003 下oracle从10.2.0.1升级到10.2.0.4
- mysql修改用户密码
- Laravel 中查询 where 记录
- 操作系统习题8—设备管理
- 怎么暂时关闭网站php,WordPress怎么临时关闭网站进行维护
- 【51单片机快速入门指南】5.3:SPI控制晶联讯JLX12864G_08602 LCD屏幕
- 关于H5工程师那些日常必需工具
- oracle反复查询一个集合,oracle集合查询
- Vue自定义属性的设置及获取
- 网易博客挂了,转一篇以前的文章过来纪念一下吧。。
- [Servlet] 初识Servlet
- 自己写段代码批量修改照片的Exif数据
- 前端开发者的必备好书:CSS世界三部曲,你都知道吗?
- BP反向传播算法推导
- Python的pyhanlp库使用(自然语言识别、姓名)
- 硬盘参数 PIO/DMA/UDMA/SWDMA/MWDMA
- 深信服网络挑战赛初赛_2019
- 智能车跟随圆弧路径原理
- MER:1.8万字带你系统了解宏组学实验与分析(高通量测序应用于病原体和害虫诊断——综述与实用性建议)...
热门文章
- 面试总结:新浪微博视频0914
- 计算机背小学英语吗,小学英语电脑版背单词软件哪个好_简单背单词软件
- 光伏“十三五”规划出炉:全新解析企业股市
- dnf单机版 不显示服务器,最新DNF70单机资源,70不悔终极版精修PVF+客户端+服务器一键端...
- 开发android蓝牙4.0 BLE低功耗应用的感受
- 分享一个旋钮插件 jquery.knob.js 新增change事件中回调返回值功能以及阻止冒泡事件
- 嵌入式Linux应用程序开发-(10)i.MX6UL基于嵌入式QT实现电容屏多点触控
- golang管道chan
- 异步时钟引起的亚稳态问题和跨时钟域电路设计
- XDOJ.70 C语言 Z字形扫描