hive - 在 SQL 中计算“运行中的位置”
问题描述
我有一个连续的 id 表(整数,1 ... n)和值(整数),如下所示:
输入表:
id value
-- -----
1 1
2 1
3 2
4 3
5 1
6 1
7 1
沿着表格向下,即按 id 递增的顺序,我想计算连续多少次连续看到相同的值,即运行中的位置:
输出表:
id value position in run
-- ----- ---------------
1 1 1
2 1 2
3 2 1
4 3 1
5 1 1
6 1 2
7 1 3
有任何想法吗?我已经搜索了包括超前和滞后在内的窗口函数的组合,但无法想出它。请注意,相同的值可以作为不同运行的一部分出现在值列中,因此按值分区可能无助于解决此问题。我在 Hive 1.2 上。
解决方案
一种方法是使用行号差异方法将连续的相同值分类为一组。然后是行号函数来获取每组中所需的位置。
查询分配组(运行这将帮助您了解如何分配组。)
select t.*
,row_number() over(order by id) - row_number() over(partition by value order by id) as rnum_diff
from tbl t
最终查询row_number
用于获取分配有上述查询的每个组中的位置。
select id,value,row_number() over(partition by value,rnum_diff order by id) as pos_in_grp
from (select t.*
,row_number() over(order by id) - row_number() over(partition by value order by id) as rnum_diff
from tbl t
) t
推荐阅读
- python - SQLalchemy-如何从 sqlite 文件中提取表?
- api - YouTube 频道:列表 API 未按顺序返回
- firebase - Firebase 托管是否有请求限制?
- python-3.x - 有时在函数内部时,质数生成器最后不返回任何内容
- javascript - 查找值的 XML 节点位置的最简单方法是什么?
- c# - 如何在运行时创建新的父子游戏对象?
- javascript - 使用 Fetch Api 进行 Giphy 搜索
- wordpress-rest-api - 为什么 woocommerce rest api 不起作用?我正在尝试通过 woocommerce rest api 以 json 格式访问产品详细信息
- android - 将数据从 android 应用程序迁移到基于 Windows 的独立应用程序
- python - 如何在一个类的实例上调用 list() 时让一个类返回一个列表