Выполнять объединение только на подвыборке - PullRequest
0 голосов
/ 22 октября 2018

У меня есть две таблицы:

  • 1-й это DIAGNOZY, который содержит столбцы: year, ID, gendre, birthday, ICZ, чтоИдентификатор медицинского работника, diagnosis_code и date.Каждый ряд является записью врачей для пациента.Существует несколько записей для каждого идентификатора одного и того же / другого врача (ICZ) с одинаковым / различным диагнозом.

  • 2-я таблица PACIENT_SEKVENCE_DETAIL - таблица для ID с, которые имеют специальный препарат, количество типов наркотиков, которые они использовали ранее, дата первого назначения (date_first) и дата назначения специального препарата (date_special).

Я бы хотел выбрать только тех пациентов, у которых дата диагноза была DIAGNOZY в тот же день или позже, чем date_special в PACIENT_SEKVENCE_DETAIL и которые имели только одну диганозуна все время (без множественного диагноза).

Таблица, которую я хотел бы иметь в конце, будет иметь два столбца: ID и DG (диагноз), и будут отдельные пациенты, которые соответствуютзаявленное состояние - поэтому каждый пациент будет там только один раз, так как у него будет не более одного диагноза.

Мой код выглядит следующим образом:

select t1.ID, diagnosis_code as DG
from (
    select d.ID as ID, count(distinct diagnosis_code) as count_dg
    from DIAGNOZY d join PACIENT_SEKVENCE_DETAIL s on d.ID=s.ID
    where d.date>=s.date_special
    group by d.ID
    having count(distinct diagnosis_code)=1) t1
join DIAGNOZY f on t1.ID=f.ID
group by t1.ID, f.diagnosis_code 

Однако он возвращает всех пациентов со всем диагнозом и полностью игнорирует условия внутреннего выбора.

Я очень плохо знаком с SQL и самостоятельно учусь с помощью Интернета, так что извините за мою глупость.

ТАБЛИЦА ДИАГНОСТИКИ:

year ID gendre  birth_date ICZ  diagnosis_code date
2012    35902587895 M   2000    94618000    L400    2012-06-11  
2013    35902587895 M   2000    94619000    L400    2013-02-04  
2012    35902587895 M   2000    94618000    L400    2012-07-11  
2013    35902587895 M   2000    94618000    L400    2013-05-10  
2011    35902591668 M   2000    08009000    L400    2011-09-27  
2015    35902596431 M   2000    89177000    M0800   2015-08-26  
2010    35902612150 M   2000    10194000    M459    2010-01-07  

PACIET_SEKVENCE_DETAIL

ID  date_first date_special nr_types_before 
35902743897 2014-10-20  2014-10-20  0  
35902767371 2016-07-27  2016-07-27  0  
35902767756 2015-09-25  2015-09-25  0  
35902772607 2010-08-04  2010-08-04  0  
35902816112 2013-12-19  2013-12-19  0  
35903616362 2014-10-02  2014-10-02  0  
35903663981 2010-01-06  2010-01-19  1  

Таким образом, в итоговой таблице будут только идентификаторы и коды диагностики для людей, у которых в таблице только один отдельный диагнозDIAGNOZY и присутствуют в другой таблице, где в nr_types_befor это 0.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вы можете попробовать это.

SELECT DISTINCT
    d.ID, 
    d.diagnosis_code DG     
FROM DIAGNOZY d
WHERE EXISTS (
    SELECT d1.ID FROM 
        DIAGNOZY d1
        INNER JOIN PACIENT_SEKVENCE_DETAIL s ON d1.ID = s.ID 
                        AND s.nr_types_before = 0
    WHERE 
        d1.ID = d.ID
        AND d1.date >= s.date_special
    GROUP BY d1.ID
    HAVING COUNT(DISTINCT d1.diagnosis_code) = 1 )
0 голосов
/ 22 октября 2018

Ваш запрос все вместе, и ваши примерные данные не собираются вместе, вы ссылаетесь на d.start_data, но только таблица с псевдонимом 's' содержит все столбцы в предложении where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...