Запрос исторических данных - новые / удаленные записи - PullRequest
0 голосов
/ 23 апреля 2020

Может ли кто-нибудь дать совет по запросу, чтобы получить сумму новых и удаленных записей за период?

У меня есть таблица, содержащая подобные исторические данные (с PKI на GUID + Дата) Таблица 1

GUID       Date          Category
----------------------------------
00001   2020-04-01         A  
00002   2020-04-01         B
00003   2020-04-01         C

00001   2020-04-02         A
00002   2020-04-02         B
00003   2020-04-02         C
00004   2020-04-02         A

00001   2020-04-03         A
00002   2020-04-03         B
00003   2020-04-03         C
00004   2020-04-03         A
00007   2020-04-03         A
00005   2020-04-03         B

00001   2020-04-04         A
00002   2020-04-04         B
00004   2020-04-04         A
00007   2020-04-04         A
00005   2020-04-04         B

В результате мне нужно получить сумму guid за период (минимальная дата в месяце), который был добавлен и удален.

В этом примере это будет

Таблица 2

Status    Period        Category  Amount
----------------------------------------
  New     2020-04-01        A        2
  New     2020-04-01        B        1
Removed   2020-04-01        C        1 

Спасибо за любые советы и помощь.

1 Ответ

0 голосов
/ 23 апреля 2020

Если я правильно понимаю, вы хотите сравнить первое и последнее появление каждого гида. Я предполагаю, что категория не меняется в течение месяца.

Если это правильно, вы можете использовать агрегацию:

select (case when max_date < data_max_date then 'removed'
             when min_date > data_min_date then 'new'
        end) as status,
       category, count(*)
from (select guid, category, min(date) as min_date, max(date) as max_date,
             min(min(date)) over () as data_min_date,
             max(max(date)) over () as data_max_date
      from t
      group by guid, category
     ) gc
where min_date <> data_min_date or max_date <> data_max_date
group by category;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...