Как сравнить несколько столбцов в нескольких строках - сравнение применимо только в строках, которые содержат общий идентификатор - PullRequest
0 голосов
/ 06 февраля 2020

Каждая запись в таблице имеет course_id (с автоинкрементом), study_id (относится к пациенту, у каждого пациента может быть несколько записей в этой таблице), и каждая запись содержит start_date и stop_date.

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

Например:

course_id  study_id  start_date  stop_date

1234123    12222     01/09/2019  01/12/2019
1444233    12222     01/10/2019  01/01/2020  

Желаемый результат запроса:

study_id

12222

et c et c для всех study_ids с аналогичными перекрытиями в начале / прекратить свидания.

Надеясь, что кто-нибудь может привести меня в правильном направлении, по крайней мере Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Использование самостоятельного соединения

select distinct t.study_id
from yourtable t
join yourtable t2 on t.study_id = t2.study_id
  and t.course_id > t2.course_id
  and t.start_date <= t2.stop_date
  and t2.start_date <= t.stop_date
0 голосов
/ 06 февраля 2020

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

select distinct study_id
from mytable t
where exists (
    select 1 
    from mytable t1
    where 
        t1.course_id <> t.course_id
        and t1.study_id = t.study_id
        and t1.start_date <= t.end_date
        and t1.end_date   >= t.start_date
)

Это работает с использованием коррелированного подзапроса с условием exists, которое фильтрует записи, для которых существует другая запись с таким же study_id и перекрывающийся диапазон дат. Затем внешний запрос использует distinct для удаления дубликата study_id.

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