У меня есть данные, подобные приведенным ниже, и я хочу получить (1) сегодняшние номера пользователей и (2) номера пользователей за последние 7 дней по указанным ниже параметрам. Мой запрос не возвращает желаемый результат. Может ли кто-нибудь исправить мой код Hive SQL?
например) сегодня = 9.08.2018
последние 7 дней = 02.08.2018 - 08.08.2018
Dimension: date, website, country_id, product_id
Metrics : user
SELECT
date,
website,
country_id,
product_id,
SUM(user) AS today_users,
SUM(user) OVER (
PARTITION BY website, country_id, product_id
ORDER BY date ASC ROWS BETWEEN 8 PRECEDING AND 1 PRECEDING) as past_7D_users
FROM Table
GROUP BY
date, website, country_id, product_id;
Необработанные данные:
>t_date |website |country_id|product_id|users
>8/1/2018 Whatev.com 2 EFG 12
>8/2/2018 Whatev.com 2 EFG 23
>8/3/2018 Whatev.com 2 EFG 34
>8/4/2018 Whatev.com 2 EFG 13
>8/5/2018 Whatev.com 2 EFG 47
>8/6/2018 Whatev.com 2 EFG 39
>8/7/2018 Whatev.com 2 EFG 17
>8/8/2018 Whatev.com 2 EFG 34
>8/1/2018 Google.com 1 ABC 10
>8/2/2018 Google.com 1 ABC 20
>8/3/2018 Google.com 1 ABC 30
>8/4/2018 Google.com 1 ABC 14
>8/5/2018 Google.com 1 ABC 40
>8/6/2018 Google.com 1 ABC 35
>8/7/2018 Google.com 1 ABC 15
>8/8/2018 Google.com 1 ABC 32
Ожидаемый результат:
date | website |country_id|product_id|today_users|past_7D_users|
2018-08-08|Google.com| 1 | ABC | 32 |164 |
2018-08-09|Whatev.com| 2 | EFG | 34 |185 |
Спасибо! Я добавил образцы данных. Для этого примера данных мой запрос работает нормально (с фиксированным значением 7 PRECEDING), но мои фактические данные очень большие и не работают таким образом .. :(
Хорошо ... Странно отвечать на свой вопрос, но я нашел обходной путь. Если кто-то знает более простой и понятный запрос, поделитесь.
SELECT x.date
,x.website
,x.country_id
,x.product_id
,x.today_users
,SUM(x.today_users) OVER (PARTITION BY x.website, x.country_id, x.product_id
ORDER BY x.date ASC ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING) AS Past_7D_Users
FROM (SELECT
date,
website,
country_id,
product_id,
SUM(user) AS today_users
FROM Table
GROUP BY
date, website, country_id, product_id
)x
GROUP BY x.date
,x.website
,x.country_id
,x.product_id
,x.today_users
;
пожалуйста, опубликуйте текущий вывод и некоторые образцы данных .. Я предполагаю, что пункт окон должен быть
ROWS BETWEEN 7 PRECEDING AND 1 PRECEDING