hive中lead和lag函数的使用

hive中lead和lag函数的使用

导入数据

select * from bus ;
+-------+-------------+
| name  |  orderdate  |
+-------+-------------+
| jack  | 2017-01-01  |
| jack  | 2017-02-03  |
| jack  | 2017-04-06  |
| jack  | 2017-01-05  |
| jack  | 2017-01-08  |
| mart  | 2017-04-08  |
| mart  | 2017-04-09  |
| mart  | 2017-04-11  |
| mart  | 2017-04-13  |
| neil  | 2017-05-10  |
| neil  | 2017-06-12  |
| tony  | 2017-01-02  |
| tony  | 2017-01-04  |
| tony  | 2017-01-07  |
+-------+-------------+

1.lead()over()将下一行提到当前行来另起字段
参数lesd(需要调整的字段名,下几行,空余部分用什么补充)over()

select name,orderdate,
lead(orderdate,1,0)over(partition by name order by orderdate)as lead_or 
from bus;
+-------+-------------+-------------+
| name  |  orderdate  |   lead_or   |
+-------+-------------+-------------+
| jack  | 2017-01-01  | 2017-02-03  |
| jack  | 2017-02-03  | 2017-04-06  |
| jack  | 2017-04-06  | 2017-01-05  |
| jack  | 2017-01-05  | 2017-01-08  |
| jack  | 2017-01-08  | 0           |
| mart  | 2017-04-08  | 2017-04-09  |
| mart  | 2017-04-09  | 2017-04-11  |
| mart  | 2017-04-11  | 2017-04-13  |
| mart  | 2017-04-13  | 0           |
| neil  | 2017-05-10  | 2017-06-12  |
| neil  | 2017-06-12  | 0           |
| tony  | 2017-01-02  | 2017-01-04  |
| tony  | 2017-01-04  | 2017-01-07  |
| tony  | 2017-01-07  | 0           |
+-------+-------------+-------------+

2.lag()over()将上一行提到当前行来另起字段
参数lag(需要调整的字段名,上几行,空余部分用什么补充)over()

select name,orderdate,
lag(orderdate,1,0)over(partition by name order by orderdate)as lag_or 
from bus;

```sql
+-------+-------------+-------------+
| name  |  orderdate  |   lag_or   |
+-------+-------------+-------------+
| jack  | 2017-01-01  | 0           |
| jack  | 2017-02-03  | 2017-01-01  |
| jack  | 2017-04-06  | 2017-02-03  |
| jack  | 2017-01-05  | 2017-04-06  |
| jack  | 2017-01-08  | 2017-01-05  |
| mart  | 2017-04-08  | 0           |
| mart  | 2017-04-09  | 2017-04-08  |
| mart  | 2017-04-11  | 2017-04-09  |
| mart  | 2017-04-13  | 2017-04-11  |
| neil  | 2017-05-10  | 0           |
| neil  | 2017-06-12  | 2017-05-10  |
| tony  | 2017-01-02  | 0           |
| tony  | 2017-01-04  | 2017-01-02  |
| tony  | 2017-01-07  | 2017-01-04  |
+-------+-------------+-------------+

3.substr获取字符转的某些字符
参数substr(需要截取的字段名,从第几位开始,从第几位结束)

select name,orderdate from sub
where substr(orderdate,1,7)="2017-04";
+----------+---------------+
| sub.name | sub.orderdate |
+----------+---------------+
| jack     | 2017-04-06    |
| mart     | 2017-04-08    |
| mart     | 2017-04-09    |
| mart     | 2017-04-11    |
| mart     | 2017-04-13    |
+----------+---------------+
发布了48 篇原创文章 · 获赞 11 · 访问量 1542

猜你喜欢

转载自blog.csdn.net/weixin_45896475/article/details/104163941