2016-09-15 2 views
0

У меня есть следующие таблицы:Выберите активным/неактивным на основе даты

Таблица TRANSACTION

ID   | DATE   
----   ------ 
1    | 23-01-16 
2    | 23-01-16 
1    | 24-01-16 

Таблица User_ID

 ID 
---- 
1 
2 

Теперь вопрос, между диапазоном дат 23-01 -16 и 25-01-16, как бы я обнаружил, что 2 неактивен 24-01-16, а 1,2 неактивны 25-01-16

Если Я использую

select u.id  
from user_id u  
where u.user_id not in (select t.id  
         from transaction t  
         where t.date>='23-01-16'  
         and t.date<='25-01-16')  

Я бы получил неактивный идентификатор между этим диапазоном, но не в соответствии с конкретными датами.

Любая идея о том, как это сделать.

ответ

0

Вы можете использовать что-то вроде следующего:

select user_id.id, day 
from user_id 
    cross join (
       select date '2016-01-23' + level -1 as day 
       from dual 
       connect by date '2016-01-23' + level -1 <= date '2016-01-25' 
       ) days 
    left outer join transaction_ on (user_id.id_ = transaction.id and 
             days.day = transaction.date 
            ) 
where transaction.date is null 

Часть с connect by строит список дней, в соответствии с вами входной интервал (23-25 ​​/ 01); в оставшейся части используется внешнее соединение для проверки только отсутствующих вхождений.

+0

Thanks @Aleksej –

Смежные вопросы