hive - 在 Hive QL 中获取当前和上一个级别
问题描述
我有一张包含以下详细信息的表格。我需要获得当前级别和上一个级别。
ID Level start_dt End_dt
A 1 2018-03-12 18:39:10 2020-01-01 00:00:00
A 1 2018-01-17 13:21:26 2018-03-12 18:39:10
A 2 2018-01-14 13:21:17 2018-01-17 13:21:26
我的结束状态表如下:ID、current_level、previous_level、升级/降级标志
我尝试根据 END_dt desc 进行排名。但它会将我的第二行列为 2,这不是上一个级别。我可以在一个查询中处理这个吗?还是单跳?
解决方案
您可以使用 LAG 获取前一行的值,参考文档LAG
create table table_1(ID string,Level int,start_dt timestamp,End_dt timestamp);
insert into table_1 values
('A',1,'2018-03-12 18:39:10','2020-01-01 00:00:00'),
('A',1,'2018-01-17 13:21:26','2018-03-12 18:39:10'),
('A',2,'2018-01-14 13:21:17','2018-01-17 13:21:26');
SQL:
select id,curr_level,prev_level,
case when curr_level=prev_level then 'No Ups - Downs'
when curr_level>prev_level then 'Downgrade'
when curr_level<prev_level then 'Up-Downgrade'
when prev_level is null then 'No-Previous Level'
else 'Unkonwn state'
end upgrade_downgrade_description
from(
select table_1.id,
table_1.level as curr_level,
lag(table_1.level,1) over (partition by table_1.id order by table_1.end_dt desc) prev_level
from table_1) s;
输出:
id curr_level prev_level upgrade_downgrade_description
A 1 NULL No-Previous Level
A 1 1 No Ups - Downs
A 2 1 Downgrade
推荐阅读
- tfs - TFS 2017 + 声纳库
- python - 过滤“pandas”中所有不包含字母(alpha)的行
- authorize.net - authorize.net 中未结算的交易到已结算的交易
- javascript - 双击时防止jwplayer视频全屏
- azure-devops - VSTS 积压项目 - 添加没有项目的任务和跨项目视图
- python - 使用 docker-compose up 与 docker-compose run 从容器中执行容器中的命令
- c# - 双缓冲给黑窗
- javascript - 如何从网页保存更改的数据?
- maven-3 - magnolia 模块生成器中的“有效认证路径”问题
- node.js - 为什么将端口更改为https时节点js套接字不起作用?