2016-08-29 3 views
0

Я не уверен, как написать представление Postgres, которое выберет правильные записи. У меня есть две таблицы:SQL-запрос для присутствия пользователя

user_tab

user_id 
email 

и

absence_tab

absence_id 
user_id 
date_from 
date_to 

в absence_tab представляет собой диапазон дат, когда пользователь не доступен (в работе;)). Я хотел бы перечислить всех пользователей, которые доступны в какой-то день, поэтому они не представлены в отсутствии_табе в эту дату.

Благодарим за консультацию.

ответ

2

Результат этого запроса будет пользователем, которого нет в absence_tab в 2016-08-29, что означает, что они, как вы сказали, доступны в этот день.

select * 
from user_tab u 
where not exists (
    select 1 
    from absence_tab a 
    where u.user_id = a.user_id 
    and '2016-08-29' between date_from and date_to 
) 
+0

Ну, этот запрос будет работать, но я хотел бы создать представление для этого. Поэтому AFAIK, если я хочу передать дату в качестве аргумента запроса (WHERE), следует также выбрать столбцы «отсутствие_from» и «отсутствие_to»;). Есть идеи? – Inweo

+0

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

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