Есть ли способ идентифицировать группу строк для использования на основе содержимого этих строк по дате? - PullRequest
0 голосов
/ 15 февраля 2019

Я ищу наборы строк на дату встречи, которые НЕ имеют «график заполнен» в качестве одного из статусов;как я могу это сделать?

Я пытаюсь найти встречи в нашей системе, которые еще не помечены как "заполненная таблица";это делается для определения встреч, где заметки еще не были сделаны.

Я пытался использовать NOT EXISTS, чтобы отсеять статусы "завершение диаграммы", но строки не возвращаются.

Мой код такойНиже (имена таблиц изменены, чтобы скрыть идентичность фактической базы данных):

select x.med_rec_nbr as 'MRN', convert(date, y.appt_date) as 'Appt Date', 
z.txt_appt_time, z.txt_status, z.txt_time
from table1 x (nolock) join table2 y (nolock) on x.person_id = 
y.person_id
join table3 c (nolock) on y.person_id = c.person_id and y.enc_id = 
c.enc_id
join table4 z (nolock) on c.person_id = z.person_id and c.enc_id = 
z.enc_id
where y.appt_date >= '20161001'
order by MRN, y.appt_date desc, x.create_timestamp desc

Некоторые примеры строк, которые я получаю, выглядят следующим образом:

MRN             Appt Date   txt_appt_time   txt_status      txt_time
000000000002    2019-01-21  10:00 AM        CHART COMPLETE  1:23 PM
000000000002    2019-01-21  10:00 AM        checked out    10:35 AM
000000000002    2019-01-21  10:00 AM        discharged     10:25 AM
000000000002    2019-01-21  10:00 AM        with provider  10:18 AM
000000000002    2019-01-21  10:00 AM        waiting for provider    10:12 AM
000000000002    2019-01-21  10:00 AM        onboarding     10:05 AM
000000000002    2019-01-14  1:45 PM         CHART COMPLETE  5:34 PM
000000000002    2019-01-14  1:45 PM         checked out     2:26 PM
000000000002    2019-01-14  1:45 PM         discharged      2:24 PM
000000000002    2019-01-14  1:45 PM         ready for clinical discharge     
2:15 PM
000000000002    2019-01-14  1:45 PM         with provider   2:10 PM
000000000002    2019-01-14  1:45 PM         waiting for provider    1:48 PM
000000000002    2019-01-14  1:45 PM         onboarding  1:42 PM

Код, который я пытаюсь использовать:

......
and NOT EXISTS (select x.med_rec_nbr as 'MRN', convert(date, 
y.appt_date) as 'Appt Date', z.txt_appt_time, z.txt_status, 
z.txt_time
from table1 x (nolock) join table2 y (nolock) on x.person_id = 
y.person_id
join table3 c (nolock) on y.person_id = c.person_id and 
y.enc_id = c.enc_id
join table4 z (nolock) on c.person_id = z.person_id 
and c.enc_id = z.enc_id
where y.appt_date >= '20161001' and z.txt_status = 'chart complete')

Ожидаемые результаты:

0000000000002   2019-01-14     2:00 PM         waiting for provider   1:52 PM
0000000000002   2019-01-14     2:00 PM         onboarding             1:50 PM

и т. Д.

Фактические результаты: нет

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Я смог использовать свой исходный код и использовать SAP Crystal Reports для фильтрации нужных мне строк.Вместо этого я решил использовать уникальный идентификатор (номер встречи) для группировки встреч, а затем я мог использовать свой флаг и извлекать детали, которые мне не нужны.Спасибо всем за помощь.

0 голосов
/ 15 февраля 2019

Вы можете добавить агрегат Windows:

with cte as
 (

    select x.med_rec_nbr as 'MRN', convert(date, y.appt_date) as 'Appt Date', 
    z.txt_appt_time, z.txt_status, z.txt_time,
    x.create_timestamp,

    max(case when pash.txt_status = 'chart complete' then 1 else 0 end)
    over (partition by x.med_rec_nbr, convert(date, y.appt_date), z.txt_appt_time) as flag

    from table1 x (nolock) join table2 y (nolock) on x.person_id = 
    y.person_id
    join table3 c (nolock) on y.person_id = c.person_id and y.enc_id = 
    c.enc_id
    join table4 z (nolock) on c.person_id = z.person_id and c.enc_id = 
    z.enc_id
    where y.appt_date >= '20161001'
 )
select *
from cte
where flag = 0
order by "MRN", "appt date" desc, create_timestamp desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...