在mysql,数据如下:#查询某一用户该日抽奖时间
select draw_time from user_draw_log where user_id = 1 and draw_date='2016-03-09' order by id; +---------------------+ | draw_time | +---------------------+ | 2016-03-09 13:52:46 | | 2016-03-09 13:52:53 | | 2016-03-09 13:53:01 | | 2016-03-09 13:53:13 | | 2016-03-09 13:53:25 | ...

想计算每次抽奖时间之间的间隔 以便判断是否是并发插入 我的方法如下使用一个临时变量记录前一次的抽奖时间

select draw_time, timediff(draw_time,@prev_time) diff,(@prev_time:=draw_time) from user_draw_log where user_id = 1 and draw_date='2016-03-09' order by id; +---------------------+------------------+-------------------------+ | draw_time | diff | (@prev_time:=draw_time) | +---------------------+------------------+-------------------------+ | 2016-03-09 13:52:46 | -00:08:28.000000 | 2016-03-09 13:52:46 | | 2016-03-09 13:52:53 | 00:00:07.000000 | 2016-03-09 13:52:53 | | 2016-03-09 13:53:01 | 00:00:08.000000 | 2016-03-09 13:53:01 | | 2016-03-09 13:53:13 | 00:00:12.000000 | 2016-03-09 13:53:13 | | 2016-03-09 13:53:25 | 00:00:12.000000 | 2016-03-09 13:53:25 | | 2016-03-09 13:53:32 | 00:00:07.000000 | 2016-03-09 13:53:32 | | 2016-03-09 13:53:38 | 00:00:06.000000 | 2016-03-09 13:53:38 | ...

有没更方便的方法实现这一功能呢?对所有用户都求相邻记录时间差该如何操作?

hive做法如下:

1.Hive row_number() 函数的高级用法 row_num 按照某个字段分区显示第几条数据

select imei,ts,fuel_instant,gps_longitude,gps_latitude,row_number() over (PARTITION BY imei ORDER BY ts ASC) as row_num from sample_data_2

2.row_num 是相互连续的,join 自身,然后时间相减可求差
create table obd_20140101 as

  select a.imei,a.row_num,a.ts,COALESCE(unix_timestamp(a.ts, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(b.ts, 'yyyy-MM-dd HH:mm:ss.S') as intervel ,a.fuel_instant,a.gps_speed as obd_speed,a.gps_status,a.gps_longitude,a.gps_latitude,a.direct_angle,a.obdspeed from obddata_20140101 a join obddata_20140101 b on a.imei = b.imei and a.row_num = b.row_num +1

事实上该方法有更加简便的方法,那就是hive的分析窗口函数:

create table obd_20140101 as

select imei,ts as ts1,fuel_instant,gps_longitude,gps_latitude,lead(ts,1,ts) over  (PARTITION BY imei ORDER BY ts ASC)  as ts2 from sample_data_2;

这样,数据会按imei分组,并按时间排序。接下来的时间相减就简单了。

select a.imei,a.row_num,a.ts,COALESCE(unix_timestamp(a.ts1, 'yyyy-MM-dd HH:mm:ss.S'), 0) - unix_timestamp(a.ts2, 'yyyy-MM-dd HH:mm:ss.S') as intervel ,a.fuel_instant,a.gps_speed as obd_speed,a.gps_status,a.gps_longitude,a.gps_latitude,a.direct_angle,a.obdspeed from obddata_20140101 a;

转载于:https://www.cnblogs.com/hd-zg/p/5930536.html

hive实现根据用户分组,按用户记录求上下两条记录的时间差相关推荐

  1. 获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)

    获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...

  2. MySQL5.7用group by分组根据组中某个字段的最大值求取那条记录(注意是整条记录)

    首先注意,取每组最大的数据和取每组最大的一条记录是两个概念,前者很简单直接分组,max()即可.另外由于我的是5.7.24版本,5.7版本普遍存在一个问题,就是select的字段只能是group by ...

  3. 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

  4. oracle数据库中求某行的上一条记录和下一条记录

    利用oracle提供的lead.lag  函数来查询已有记录的上一条.下一条记录. 求id=ae2e829ecffd4715a5c163f829c2e0f5的上一条记录和下一条记录 上一条记录的sql ...

  5. mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...

    [单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...

  6. Slq怎么样获取首条记录和最后一条记录

    sql如何查询表的第一条记录和最后一条记录 方法一:使用top select TOP 1 * from apple;TOP 1 表示表apple中的第一条数据select TOP 1 * from a ...

  7. sql如何查询表的第一条记录和最后一条记录

    问题: sql如何查询表的第一条记录和最后一条记录 方法一:使用top select TOP 1 * from apple;select TOP 1 * from apple order by id ...

  8. 创客匠人用户分组:用户定向运营,不浪费一滴流量

    从2016年知识付费元年至今,知识付费市场一直奔驰在高速道上,用户规模不断扩大. 在知识付费越来越成熟的同时,教培机构.老师等内容创业者也面临着很多问题:让用户买单越来越不容易了.有时候明明已经策划了 ...

  9. HIve分组查询返回每组的一条记录

    select a.lng,a.lat from (select row_number() over ( partition by uid,grid_id) as rnum,weighted_centr ...

最新文章

  1. Windows Phone 7 Tip (4) -- User Agent
  2. R语言:求二维变量数学期望
  3. 财务思维01-财务报表
  4. pc端js获取当前经纬度_Swiper 免费开源、功能强大的触摸滑动 js 特效插件
  5. 创建calico网络报错client response is invalid json
  6. 央行数字货币研究所悄然挂牌 工作人员:已有一段时间
  7. 从前,有只小仙女叫...
  8. javascript实现图片轮播_第2章 第9节 JavaScript(四)
  9. ado.net 查询 小结 c# 1614653302
  10. spring-data-redis和jedis版本对应问题
  11. mongodb安装指南 及使用
  12. 鸟哥Linux 私房菜
  13. UPF和POWER Domain
  14. 手持式频谱分析仪怎么选择
  15. vue结合echarts开发柱状图+折线图合并的图表
  16. Android 12 灭屏流程(一) Power键灭屏
  17. 7-4 疯狂星期四!!!!!
  18. 总结一下m3u8格式相关问题
  19. 一些面试的SQL题 答案及建表全部齐全!
  20. 在docker容器中操作es,并给es7.6添加用户鉴权设置密码

热门文章

  1. FLUSH TABLES WITH READ LOCK 和 LOCK TABLES比较
  2. c# 使用timer定时器操作,上次定时到了以后,下次还未执行完怎么处理
  3. 克服Dropout缺陷,简单又有效的正则方法:R-Drop
  4. 视频异常行为检测算法MPN,在多个数据库上达到SOTA
  5. 减少代码行数就是提高生产力!美国防部研究人员开源低代码量的机器学习框架:ktrain...
  6. 图像检索新方向,阿里提出区域检索算法|CVPR 2020
  7. 一行命令搞定图像质量评价
  8. 近期计算机视觉相关算法竞赛汇总—高额奖金等你来拿!
  9. 93%程序员都做过的事:来写一个python式的hello world吧
  10. 万能钥匙也不能解开的wifi?那用Python帮你轻松解决