2015-06-28 54 views
0

之間的會話和交易,我想寫一個HiveQL(甚至ANSI SQL)查詢,可以回答以下的:SQL - 計數會議

我有一個事件(交易)的數據庫,每個事件存儲有一個user_id和一個trans_time(交易時間)。 A user_id可以有無限的事件,甚至可能有多個事件使用相同的trans_time

如果我建立了一個時間(即10秒)的活動窗口,那個窗口內有多少個窗口有多少個事件?我想結果會是這樣的(顯然沒有這個詞,只是數字)...
100個窗口只有1個事件
50個窗口有2個事件


1個窗口有30個事件

描述第一個結果......數據集中有100個實例,其中只有1個事件發生在10秒窗口內。

是否有拉其他指標指出,說了同樣的數據的方法, 50 user_ids只有1事件
25 user_ids有2個事件


1 user_id有30個事件

描述第一個結果......有50個user_id在10秒窗口內只有1個事件。

我希望這不是太模糊。一如既往,謝謝!

+0

很難準確掌握你所追求的。您的表格和所需輸出的示例將指數級增加您的問題得到解答的可能性。 – gobrewers14

回答

1

如果您的Windows是靜態的,例如:
窗口1 - 12:00:00 - 12時00分09秒
窗口2 - 12點00分10秒 - 12點00分十九秒等

你可以這樣做:

-- this counts number of windows per with same number of events 
select events_in_window,count(*) windows 
from (
    -- this counts events in each window 
    select window ,count(*) events_in_window 
    from (
     -- this rounds all the transactions to windows 
     select user_id,from_unixtime(floor(unix_timestamp(trans_time)/10)*10) window 
     from table) a 
    group by window) b 
group by events_in_window 

注 「10」 在trans_time 「四捨五入」。您可以將其更改爲任何需要的窗口大小。