【发布时间】:2023-03-14 05:54:01
【问题描述】:
我有一个类似下面的表格。
|name | grp | dt
------------------------------
|foo | A | 2016-01-01
|bar | A | 2016-01-02
|hai | B | 2016-01-01
|bai | B | 2016-01-02
|baz | C | 2016-01-01
对于每个组,我想找到name 的dt 是最新的。也就是说,MAX(dt),GROUP by grp,将dt为组的最大值的名字关联到输出:
|name | grp | dt
------------------------------
|bar | A | 2016-01-02
|bai | B | 2016-01-02
|baz | C | 2016-01-01
在 Oracle 中,以下查询有效且非常干净(取自 here):
SELECT o.name, o.grp, o.dt
FROM tab o
LEFT JOIN tab b
ON o.grp = b.grp AND o.dt < b.dt
WHERE b.dt IS NULL
但是 [Error 10017]: Line 4:43 Both left and right aliases encountered in JOIN 'service_effective_from' 失败了 从另一个 question 引用 documentation,我了解到我不能在连接语句中使用不等式运算符:
Hive 仅支持等式连接、外连接和左半连接。 Hive 不支持非相等条件的连接条件,因为很难将此类条件表示为 map/reduce 作业。
鉴于我不能在连接条件中使用不等式运算符,在 Hive 中获得此内容的干净解决方案是什么?
【问题讨论】:
-
如果您想查找
name其dt是每个组中最新的,那么为什么要返回foo?它与2016-01-01相关联,这不是A组中最新的。 -
@GoBrewers14 我很抱歉;你是对的;我已将其编辑为
bar