您的位置:首页 > 其它

累加功能的实现 (累计计算)

2013-01-10 17:45 218 查看
用户,日 期,   当日消费金额。

001   2013-1-10  100

002   2013-1-10  200

001   2013-1-11  50

002   2013-1-11  80

001   2013-1-12  300

得到

用户,日期,  当日消费金额,累计消费金额

001   2013-1-10  100   100

002   2013-1-10  200   200

001   2013-1-11  50    150

002   2013-1-11  80    280

001   2013-1-12  300   450

实现方式如下:
mysql支持:
SELECT FIELD1,FIELD2,FIELD3,

       ( SELECT SUM(FIELD3)

         FROM   TEST_AA

         WHERE  FIELD1 = A.FIELD1

                AND FIELD2 <= A.FIELD2

       ) AS FIELD4

FROM   TEST_AA A

但hive不支持这个。

mysql实现方式二:(QQ网友西瓜小王子(365742944)  提供 ):

select a.f1,a.f2,a.f3,sum(b.f3) 
from 
(select f1,f2,f3 from test_A) a 
join (select f3 from test_A ) b
 on (a.f1 = b.f1 and a.f2 >= b.f2)

group by a.f1,a.f2.a.f3 

但由于hive不支持 join 条件 on中不等于,故也无法在hive中实施。

还有一种方式:

select a.id,a.date,a.num as nu,sum(if(a.date>=b.date,b.num,0))

from 

(select id,date,num from cost)a 

join 

(select id,date,num from cost)b 

on (a.id = b.id )

GROUP by a.id,a.date,a.num

西瓜小王子  18:18:59

hive 中我试了,没问题

西瓜小王子  18:20:33

但是这样会在内存中制造count(*) 乘以count(*) 级数的数据

经过试验,是可以正常运行,但由于数量级是全join,故hive执行起来也很慢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐