Snowflake SQL 列出每小时会话计数(按天和小时分组)

Snowflake SQL listing session counts per hour (group by day and hour)

我正在尝试从用户交易的 Snowflake table 中计算唯一会话 tokens/hour。 尽管我按日期和小时执行不同的计数和分组,但我每天只得到一个结果记录。

我的查询是:

select to_date(EVENT_TIMESTAMP) as SessDate,
   date_part(hour, current_timestamp()) as SessHour,
   count(distinct event_data:"u-token") as userTokenCount
from
  APPTRANSACTIONTABLE
where
  event_timestamp BETWEEN '2020-03-12T00:00:00.00' AND '2020-03-14T23:59:59.59'
group by SessHour, SessDate
order by SessHour, SessDate

但是我的结果每天只显示一条记录,而我想按日期和小时显示结果。

您的 datepart() 时间戳错误(current_timestamp 而不是 EVENT_TIMESTAMP):

select to_date(EVENT_TIMESTAMP) as SessDate,
       date_part(hour, EVENT_TIMESTAMP) as SessHour,
       count(distinct event_data:"u-token") as userTokenCount
from APPTRANSACTIONTABLE
where event_timestamp BETWEEN '2020-03-12T00:00:00.00' AND '2020-03-14T23:59:59.59'
group by SessHour, SessDate
order by SessHour, SessDate;

我还建议将 WHERE 子句写得更简单:

where event_timestamp >= '2020-03-12' AND
      event_timestamp < '2020-03-15'

没有理由过滤掉午夜前一秒发生的事件。您还可以使用 date_trunc() 进一步简化:

select date_trunc('hour', EVENT_TIMESTAMP) as session_day_hour,
       count(distinct event_data:"u-token") as userTokenCount
from APPTRANSACTIONTABLE
where event_timestamp >= '2020-03-12' AND
      event_timestamp < '2020-03-15'
group by session_day_hour
order by session_day_hour;