Импала - выполнение одного и того же запроса в течение нескольких дат - PullRequest
0 голосов
/ 21 марта 2020

У меня нижеприведенный запрос Impala, который настроен на подсчет количества устройств, которые находятся в наборе данных за один день, но не за день до этого. Я хотел бы выполнить этот запрос для нескольких дат (каждый день в прошлом году).

Есть ли способ сделать это в Impala? Я знаю, что функции l oop нет, но не был уверен, есть ли какой-нибудь способ передать массив дат в переменную, чтобы запрос выполнялся через последовательные даты. Спасибо!

SELECT COUNT(DISTINCT devices) 
FROM request
WHERE devices NOT IN (
    SELECT devices
    FROM request
    WHERE forwarded_dt =  CAST((CAST('2020-03-17' as timestamp)) as BIGINT)*1000
    )  
AND forwarded_dt =  CAST((CAST('2020-03-18' as timestamp)) as BIGINT)*1000;

1 Ответ

0 голосов
/ 21 марта 2020

Вы можете использовать lag(). Я думаю:

select day,
       count(*) as num_devices_on_day,
       sum(case when prev_day = day - interval '1' day then 0 else 1 end) as new_devices_on_day
from (select device, date_trunc('day', timestamp) as day,
             lag(date_trunc('day', timestamp)) over (order by min(timestamp)) as prev_day
      from requests
     ) r
group by day;
...