Снежинка SQL перечисляет количество сеансов в час (группа по дням и часам) - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь подсчитать уникальные токены сессии / час из таблицы пользовательских транзакций Snowflake. Несмотря на то, что я выполняю подсчет, различающийся по группам, по дате и часу, я просто получаю одну запись результата для каждого дня.

Мой запрос:

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

Но мой результат отображает только одну запись в день, тогда как я хочу отображать результаты по дате и по часам. enter image description here

1 Ответ

1 голос
/ 20 марта 2020

Ваш 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;
...