sql - 如何根据hive中的时间顺序选择第一条和最后一条记录?
问题描述
我有一个两列的蜂巢表。第一列是时间,第二列是分散的物体。我希望得到所有在时间上连续的相同对象组,并获取第一条和最后一条记录。如何在蜂巢中实现这一点?
例如,我有一个这样的表:
id time object
1 10:01:00 a
2 10:02:00 a
3 10:03:00 a
4 10:04:00 b
5 10:05:00 b
6 10:06:00 a
7 10:07:00 a
8 10:08:00 a
9 10:09:00 a
10 10:10:00 a
11 10:11:00 c
我希望得到这个(因为对象'a'从 10:01:00 到 10:03:00 以及从 10:06:00 到 10:10:00 是连续的,所以 line1&line3 和 line6&line10 都被拾取):
id time object
1 10:01:00 a
3 10:03:00 a
4 10:04:00 b
5 10:05:00 b
6 10:06:00 a
10 10:10:00 a
11 10:11:00 c
我应该怎么做才能实现这一目标?
解决方案
lag
您可以分别使用和选择不等于上一行或不等于下一行的行lead
。还需要检查第一行/最后一行以包含它们。
select id, time, object from
(select *,
(lead(object) over (order by time) != object or row_number() over (order by time desc) = 1) cond1,
(lag(object) over (order by time) != object or row_number() over (order by time) = 1) cond2
from table)
where cond1 or cond2;
推荐阅读
- python - Discord PY Bot,根据特定消息的反应创建列表
- google-apps-script - 有没有一种方法可以从查询结果中选择并自动填充谷歌表中的订单表?
- azure-data-explorer - 如何从具有不同架构的多个资源中摄取数据
- android - 当我尝试注册用户时出现错误
- c++ - 任何使用的理由!在 C++ 中?
- php - 当值不为空时从另一个表调用值
- c - 获取当前 X11 服务器时间
- java - IntelliJ IDEA 不显示新创建的类或文件。要查看文件,我需要完全重新启动程序
- python - 即使我导入了我的 python 文件也无法识别我的 sqlite 表
- laravel - Laravel Eloquent - 按数组顺序按列排序集合