首页 > 解决方案 > Snowflake SQL 列出每小时的会话计数(按天和小时分组)

问题描述

我正在尝试从用户事务的雪花表中计算唯一会话令牌/小时。尽管我按日期和小时执行计数不同和分组,但我每天只得到一个结果记录。

我的查询是:

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

但是我的结果每天只显示一条记录,而我想按日期和小时显示结果。 在此处输入图像描述

标签: sqldatabasedata-miningsnowflake-cloud-data-platform

解决方案


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;

推荐阅读