Нужно найти разницу данных из той же таблицы в улье - PullRequest
0 голосов
/ 09 марта 2020

У меня есть таблица истории с загруженным столбцом метки времени. Мне нужно получить вычтенные данные, используя столбец отметки времени. Logi c: чтобы получить адрес электронной почты путем вычитания данных из (loaded_timestamp -1) и current_timestamp. Только вычтенные данные должны быть выходными.

Выбор запроса:

select t1.email_addr
from (select *
      from table t1
      where loaded_timestamp = current_timestamp
     ) left outer join
     (select *
      from table t2
      where loaded_timestamp = date_sub(current_timestamp,1)
    )
where t1.email!=t2.email;

Таблица имеет следующие столбцы

Email address, First name , last name, loaded_timestamp. 
xxx@gmail.com,xxx,aaa,2020-03-08.   
yyy@gmail.com,yyy,bbb,2020-03-08. 
zzz@gmail.com,zzz,ccc,2020-03-08. 
xxx@gmail.com,xxx,aaa,2020-03-09. 
yyy@gmail.com,yyy,bbb,2020-03-09.

Желаемый результат

zzz@gmail.com

Таким образом, если вычесть две даты из одной таблицы, т.е. (2020-03-09 - 2020-03-08). Я должен получить только запись, которая не соответствует. Соответствующие записи должны быть отброшены, а несоответствующая запись должна быть выходной.

1 Ответ

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

Лучшее, что я могу понять, это то, что вы хотите, чтобы электронные письма появлялись только один раз. Если это так, используйте функции окна:

select t.*
from (select t.*, count(*) over (partition by email) as cnt
      from t
     ) t
where cnt = 1;

Если вы хотите, чтобы электронные письма содержали данные, но не были загружены на текущую дату, тогда:

select t.email
from t
group by t.email
having max(timestamp) <> current_date;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...