2010-09-08 3 views
1

Мы собираем данные посещаемости в определенной таблице, в первую очередь захватывая значения (userId, startDate, endDate). Если лицо применяет отпуск на определенную дату, то заполняется только startDate, и если он подает заявку на набор дат, тогда фиксируются даты начала и окончания. Что запрос поможет мне найти, если человек берет отпуск на определенную дату (скажем, на 9-й, 12-й, 15-й в этом месяце)Как узнать, соответствует ли дата определенному периоду

user1, 9/8/2010 
user2, 9/9/2010, 9/10/2010 
user3, 9/14/2010 
user4, 9/15/2010 
user5, 9/9/2010, 9/20/2010 

users taking leaving on 9th would be user2, user5 
users taking leaving on 12th would be user5 
users taking leaving on 15th would be user4, user5 

Запрос не должен содержать базы данных конкретных конструкций, она должна работать на h2/MySQL/Postgres с использованием Hibernate в качестве ORM слоя

ответ

7
SELECT userId 
FROM mytable 
WHERE '2010-09-09' BETWEEN startDate AND COALESCE(endDate, startDate) 
+0

мы используем спящий режим, как ОРМ слоя, является команда COALESCE переносимыми между базами данных – Sam

+0

Сво стандарт и работает в 'MySQL',' 'PostgreSQL', Oracle 'и' SQL Server'. Однако не знаю о «H2». – Quassnoi

+0

Он также работает на h2, спасибо – Sam