Скользящее среднее значение за 31 день, включая предыдущие 31 день от BigQuery - PullRequest
0 голосов
/ 23 января 2019

Я создал запрос, который возвращает подсчет количества строк (записей) за последние 31 день (на основе поля timestamp) и также включает в себя предыдущие 31 день до этого периода, например.создать запрос, который возвращает оба.Теперь у меня есть следующий запрос:

SELECT
  COUNT(*) OVER(ORDER BY datetime DESC RANGE BETWEEN 2678400000 PRECEDING AND CURRENT ROW) AS rolling_avg_31_days,
  COUNT(*) OVER(ORDER BY datetime DESC RANGE BETWEEN 5356800000 PRECEDING AND CURRENT ROW) AS rolling_avg_62_days
FROM `p`
ORDER BY rolling_avg_31_days DESC LIMIT 1

И он возвращает некоторые данные, но не те данные, на которые я надеялся:

rolling_avg_31_days | rolling_avg_62_days   
          8,422,783 | 9,790,304

Если я запрашиваю ту же таблицу с помощью (Rolling62 дня):

SELECT COUNT(*)  FROM `p`
WHERE datetime > UNIX_MILLIS(CURRENT_TIMESTAMP)-5356800000 AND datetime < UNIX_MILLIS(CURRENT_TIMESTAMP)-2678400000'

Я получаю значение 6,192,920

Я не уверен, что делаю неправильно.Любая помощь высоко ценится!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вместо того, чтобы идти выше, я решил изменить запрос, чтобы он был немного проще:

SELECT
(SELECT COUNT(DISTINCT(wasabi_user_id)) FROM `p` WHERE datetime > UNIX_MILLIS(CURRENT_TIMESTAMP)-5356800000 AND datetime < UNIX_MILLIS(CURRENT_TIMESTAMP)-2678400000) as _62days,
(SELECT COUNT(DISTINCT(wasabi_user_id)) FROM `p` WHERE datetime > UNIX_MILLIS(CURRENT_TIMESTAMP)-2678400000) AS _31days
FROM `mycujoo_kafka_public.v_web_event_pageviews` LIMIT 1

Спасибо @Mikhail за помощь, хотя!

0 голосов
/ 23 января 2019

Итак, первый запрос правильный и дает вам скользящее число (31 и 62 дня) на основе поля отметки времени - также из-за order by .. desc и limit 1 вы получаете наибольшее количество строк имеет наибольшее значение rolling_avg_31_days, которое не обязательно является строкой для самой последней () даты / времени

Второй запрос просто производит количество строк от 62 до 31 дня, основываясь на текущей отметке времени - что, как объяснено выше, не то, что производит первый запрос - таким образом, расхождение

Чтобы далее troubleshoot или попытаться понять разницу - измените ORDER BY rolling_avg_31_days DESC LIMIT 1 на ORDER BY datetime DESC LIMIT 1, а также добавьте datetime, чтобы выбрать выписку, чтобы вы могли видеть, относится ли она к текущей дате или близка к текущей выписке, чтобы результаты сопоставимый

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...