我有一个包含三列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] 删除。
我来说两句