我有一张类似下面的table。
|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为组的max的名称与输出相关联:
|name | grp | dt
------------------------------
|bar | A | 2016-01-02
|bai | B | 2016-01-02
|baz | C | 2016-01-01
在oracle中,以下查询工作正常且非常干净(取自此处):
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'
从引用文档的另一个问题中,我了解到我不能在join语句中使用不等式运算符:
配置单元中仅支持相等联接、外部联接和左半联接。配置单元不支持非相等条件的联接条件,因为很难将此类条件表示为map/reduce作业。
如果我不能在连接条件中使用不等式运算符,那么在配置单元中获得该表达式的干净解决方案是什么?
1条答案
按热度按时间lqfhib0f1#
下面的作品是从这里取材的,但我觉得不是很干净:
另外,对于一个具有4行的可比较测试表,在我的环境中需要164秒。