使用者,日 期, 當日消費金額。
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執行起來也很慢。