mysql - HiveQL:在一对多表中查找第 N 个值

标签 mysql sql hive hiveql

我有一个简单的表格:

UserID  EventTimestamp
...     ...

用户可以有任意数量的事件(从无到很多)。我需要运行一个 HiveQL 查询来提取第三个事件的时间戳(按升序)。少于 3 个事件应导致 null。

是否有不需要使用 UDF 模拟 rank() 的解决方案?

最佳答案

如果你可以使用 MySQL 查询,你可以使用这样的东西:

SELECT
  e1.UserID,
  MIN(e3.EventTimestamp) ThirdTimestamp
FROM
  Events e1 LEFT JOIN Events e2
  ON e1.UserID=e2.UserID and e1.EventTimestamp<e2.EventTimestamp
  LEFT JOIN Events e3
  ON e1.UserID=e3.UserID and e2.EventTimestamp<e3.EventTimestamp
GROUP BY
  UserID

fiddle here .

关于mysql - HiveQL:在一对多表中查找第 N 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16279665/

相关文章:

mysql - 规范化使得跨多个表的连接变得困难

MySQL - 列的 LEFT JOIN 值,其中 MAX(列)

mysql - 在 MYSQL 中,GROUP BY 之后在几个字段中选择最常出现的值

sql - 从现有表中的一列中选择不同的 varchar 值,转换为 int 并在一步内插入到临时表中

hadoop - 如何解决Hive中过多的分区问题

php - MySQL错误: Unknown column in 'field list'

MySQL - Perl- Order by - 如何显示 ABS(PartNum) DESC 但是,三个不同的 (PartNum) 类别?

c# - 如何使用 C# 将 SQL 存储过程表转换为 HTML

hive - 配置单元中的分区列

hadoop - Hive:SHOW CONF 不遵守 hive-site.xml