Как получить строки, которые имеют ненулевые значения в обоих периодах, но не существуют в другом документе той же компании? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть база данных, где есть разные компоненты со значениями периода «Текущий» и «Исторический». Эти компоненты могут принадлежать разным документам одной и той же компании.

Моя производная таблица после нескольких объединений выглядит так -

company_id       document_id       component_id      value      period
1000                   100             1              456      current
1000                   100             1              870      historical
1000                   100             2              67       current 
1000                   100             2              NULL     historical
1000                   200             2              67       historical

Я хочу получить компонент_id '1' сверху: он имеет значения как в текущем, так и в хронологическом порядке для document_id ' 100 ', но не существует для document_id' 200 '

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вы можете проверить счет (отличный) = 2 с помощью HAVING

     select document_id, component_id, count(distinct period)
     from my_table  
     group by  document_id, component_id 
     HAVING count(distinct period)= 2
0 голосов
/ 25 апреля 2020

Я хочу получить компонент_id '1' сверху: он имеет значения как в текущем, так и в хронологическом порядке для document_id '100', но не существует для document_id '200'

Вы можете использовать агрегацию и предложение having:

select component_id
from t
group by component_id
having count(*) filter (where period = 'current' and document_id = 100) > 0 and
       count(*) filter (where period = 'historical' and document_id = 100) > 0 and
       count(*) filter (where document_id = 200) = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...