SQL - 会话计数和会话之间的事务

SQL - Count of Sessions and transactions between session

我正在尝试编写一个 HiveQL(甚至 ANSI SQL)可以回答以下问题的查询:

我有一个包含事件(交易)的数据库,每个事件都存储有一个 user_id 和一个 trans_time(交易时间)。一个 user_id 可以有无限个事件,甚至可以有多个具有相同 trans_time.

的事件

如果我建立一个 activity window 的时间(即 10 秒),那么在 window 中有多少个 windows 有多少个事件?我想结果会是这样的(显然没有文字,只有数字)...
100 windows 只有 1 个事件
50 windows 有 2 个事件
.
.
1 window 有 30 个事件

描述第一个结果...数据集中有 100 个实例,其中 10 秒内只发生了一个事件 window。

有没有办法从相同的数据中提取另一个指标,说, 50 user_ids 只有 1 个事件
25 user_ids 有 2 个事件
.
.
1 user_id 有 30 个事件

描述第一个结果...有 50 个 user_ids 在 10 秒内只有一个事件 window。

我希望这不是太模糊。一如既往,谢谢!!

如果您的 windows 是静态的,例如:
window 1 - 12:00:00 - 12:00:09
window 2 - 12:00:10 - 12:00:19 等等

你可以这样做:

-- 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 

注意 trans_time "rounding" 中的“10”。您可以将其更改为您需要的 windows 的任何大小。