2015-12-29 2 views
0

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

У меня есть таблица сеансов, которые работают в клинике врачей. Используемые столбцы: Идентификатор клиники, идентификатор сеанса, дата сеанса. Пример данные будут

Clinic_ID | Session_ID | Session_Date 
    1  |  1  | 20160114 
    1  |  2  | 20160121 
    1  |  3  | 20160128 
    2  |  1  | 20160114 
    2  |  2  | 20160128 

В Clinic_ID ссылки на таблицу клиники, где он хранит основные детали для клиники. Связь состоит в том, что одна клиника может иметь много сеансов против нее.

Данные я пытаюсь получить для любой клиники, которая имеет сеанс работает на Session_Date с 20160121, но не сеанс работы на 20160128.

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

Названия таблиц - это Clinic_List для клиник и Session_List для сеансов.

+1

Вы должны пометить свой вопрос в базе данных, которую используете. –

+0

Моя первая мысль была вокруг ниже, но это, очевидно, не работает, как intial выбрать бы найти какой-либо сессии не работает на 20160128 SELECT, FROM Clinic_List.CLINIC_ID Clinic_List INNER JOIN Session_List ON Clinic_List.CLINIC_ID = Session_List.CLINIC_ID ГДЕ SESSION_DATE <> '20160128' И Session_List.CLINIC_ID IN (SELECT Session_List.CLINIC_ID FROM Session_List ГДЕ SESSION_DATE = '20160121') – BigMark

ответ

0

Один из способов приблизиться к этому использует group by и пункт having:

select clinic_id 
from Sessions_List 
group by clinic_id 
having sum(case when session_date = 20150121 then 1 else 0 end) > 0 and 
     sum(case when session_date = 20160128 then 1 else 0 end) = 0; 

Мне нравится этот подход (с помощью предложения having), поскольку он является достаточно гибким для широкого диапазона условий. Каждое выражение в предложении having подсчитывает количество сеансов на заданную дату. > 0 означает, что есть сеанс; = 0 означает, что нет.

+0

Это работало блестяще. Большое спасибо за вашу помощь. – BigMark

0
select distinct Clinic_ID 
from Session_List 
where Session_Date = '20160121' 
     and Clinic_ID not in 
     (
     select Clinic_ID 
     from Session_List 
     where Session_Date = '20160128' 
     ) 
Смежные вопросы