Запрос возвращает дубликаты записей из-за нескольких значений в столбце для одной и той же записи.Нужна помощь для фильтрации запроса - PullRequest
0 голосов
/ 02 июня 2019

У меня есть запись клиента с несколькими значениями этнического кода.Каждому этническому коду присваивается номер приоритета, который определен в справочной таблице.Мой текущий запрос выбора создает запись для каждого значения этнической принадлежности для данного клиента.Я хотел бы использовать значение приоритета и получить только запись для клиента, который получил наивысшее значение приоритета.(1 - самый высокий, 99 - самый низкий приоритет)

Мой запрос на выборку в настоящее время возвращает запись для каждого кода этнической принадлежности для клиента.

select distinct external_id,
pat.patient_id,
eth.ethnicity_code,
et.description,
et.priority
FROM
patient.patient pat
INNER JOIN patient.Ethnicity eth ON pat.patient_id=eth.patient_id
INNER JOIN lookup.LK_EthnicityCode et ON eth.ethnicity_code=et.ethnicity_code

Мой текущий набор результатов такой, как показано ниже

Actual Result

Мой ожидаемый результат должен содержать только строки 1,2,3,4,7 и 8 ввышеуказанный набор результатов.

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Я также играл со своим запросом и получил ожидаемые результаты с приведенной ниже модификацией к моему исходному запросу

select distinct external_id,
pat.patient_id,
eth.ethnicity_code,
et.description,
et.priority
FROM
patient.patient pat
INNER JOIN patient.Ethnicity eth ON pat.patient_id=eth.patient_id
INNER JOIN lookup.LK_EthnicityCode et ON eth.ethnicity_code=et.ethnicity_code
And et.priority = ( SELECT min(et1.priority) 
FROM lookup.LK_EthnicityCode et1, patient.Ethnicity eth1
where eth1.ethnicity_code=et1.ethnicity_code
and eth.patient_id=eth1.patient_id )
ORDER BY patient_id
0 голосов
/ 02 июня 2019

Вы можете достичь этого с помощью row_number(), он назначит 1 (numberPriority) каждому patient_id с highest priority в пределах patient_id (1 - наивысший, 99 - наименьший приоритет).

with patients as  (
    select distinct external_id,
    pat.patient_id,
    eth.ethnicity_code,
    et.description,
    et.priority,
    row_number() over (partition by pat.patient_id order by et.priority asc) as numberPriority
    FROM
    patient.patient pat
    INNER JOIN patient.Ethnicity eth ON pat.patient_id=eth.patient_id
    INNER JOIN lookup.LK_EthnicityCode et ON eth.ethnicity_code=et.ethnicity_code
)
select  
    *
from patients
where numberPriority = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...