我有一张类似于以下内容的表格。
|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'
window.addEventListener ("hashchange", fireOnNewPage, false);
function fireOnNewPage () {
// console.log ("Fired");
}
引用了question引用了documentation,我知道我无法在连接语句中使用不等式运算符:
Hive仅支持等同连接,外连接和左半连接。 Hive不支持非平等条件的连接条件,因为很难表达map / reduce作业等条件。
在Hive中获取此项的干净解决方案是什么,因为我不能在连接条件下使用不等式运算符?
答案 0 :(得分:0)
以下作品取自here,但我发现它不是很干净:
SELECT o.name, ogrp, o.dt
FROM tab o
JOIN (
SELECT grp, MAX(dt) dt
FROM tab
GROUP BY grp
) b
ON o.grp = b.grp AND o.dt = b.dt
另外,对于具有4行的可比测试表,我的环境需要164秒。