配置单元自我加入基于以前的日期

乔恩

我有一个包含三列ID,名称和日期的表。每天,我都会从外部进程中获得所有名称和ID的转储。我想生成一个输出表,其中每天我都会获得一天中以前从未见过的唯一名称数的计数。

例如,给定以下数据

id    name    d
1    Bob    2014-01-01
2    Suzy   2014-01-01
3    Jen    2014-01-02
4    Jen    2014-01-02
5    Bob    2014-01-02
6    Jon    2014-01-03
7    Mike   2014-01-03
8    Suzy   2014-01-03

我想查询返回

d             name_count
2014-01-02    1
2014-01-03    2

我的第一个想法是使用如下所示的相关子查询,但Hive不支持

select c.d, count(distinct lower(c.name)) as name_count
from db c
where lower(c.name) not in (
  select lower(p.name) as name
  from db p
  where p.d < c.d
  group by lower(p.company_name)
)
group by d

我虽然也打算使用左外部联接,但是我认为这不会给我我想要的东西

select c.d, count(distinct lower(c.name)) as name
from db c
left outer join db p on lower(c.name) = lower(p.name)
where p.name is null and p.d < c.d
group by c.d;

因为p.name在我自我加入时永远不会为null。

你们知道我的第二个查询是否有效吗?如果不能,请提出一个替代方案。

谢谢

阿玛

稍微不同的方法但嵌套查询应解决此问题:

询问:

选择qd,从(从table_name GROUP BY名称中选择d,min(d)作为d)选择COUNT(*)q GROUP BY qd

输出:

2014-01-01  2
2014-01-02  1
2014-01-03  2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章