Teradata SQL Запрос на фильтрацию только тех строк, у которых есть запись для всех идентификаторов периода - PullRequest
1 голос
/ 02 апреля 2020

У меня есть набор данных с 3 столбцами (ID, ГГГГММ, продажи). Я хотел, чтобы для каждого ГГГГМ (с 201909 по 202003 гг.) Присутствовали только те идентификаторы, которые записываются.

Я хочу иметь дату на уровне идентификатора и на уровне ГГГГММ. Я не хочу использовать group by, и набор данных сокращен до одной строки идентификатора.

Ответы [ 2 ]

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

Хммм. , , Я думаю, что это делает то, что вы хотите:

select t.*
from mytable t
where yyyymm >= 201909 and
      yyyymm <= 202003
qualify count(*) over (partition by id) = 6;
0 голосов
/ 02 апреля 2020

Вы можете использовать оконные функции и предложение qualify:

select t.*
from mytable t
qualify count(*) over(partition by id) 
    = 1 + max(floor(yyyymm / 100) * 12 + (yyymmm mod 100)) over() 
        - min(floor(yyyymm / 100) * 12 + (yyymmm mod 100)) over()

Предложение qualify подсчитывает, сколько записей существует для текущего id, и сравнивает его с общим числом yyyymmdd s, который может быть вычислен путем вычитания его максимальных и минимальных значений (предполагается, что это числовое значение c, как оно выглядит).

...