попробовать это:
select user_id, min(case when status = 'IN' then Date end) as mindate,
max(case when status = 'OUT' then Date end) as maxdate, status
from tbl
group by user_id, Status
демо: http://sqlfiddle.com/#!3/9430e/6
Другой способ сделать это:
select a.user_id, mindate, maxdate
from
(
select user_id, min(date) as mindate, Status
from tbl
where Status = 'IN'
group by user_id, Status) a
left join
(
select user_id, max(date) as maxdate, Status
from tbl
where Status = 'OUT'
group by user_id, Status) b
on a.user_id = b.user_id
демо: http://sqlfiddle.com/#!3/9430e/14
Edit: Чтобы проверить, мин и максимальная дата находится в диапазоне дат по вашему выбору, используя s econd пример добавить где состояние в конце: (если я правильно понял)
select a.user_id, mindate, maxdate
from
(
select user_id, min(date) as mindate, Status
from tbl
where Status = 'IN'
group by user_id, Status)
a
left join (
select user_id, max(date) as maxdate, Status
from tbl
where Status = 'OUT'
group by user_id, Status) b on a.user_id = b.user_id
where @yourstart date <= maxdate and @yourenddate >= mindate
эту проверку, если две даты пересекаться ...
вы можете мне помочь Я хочу выбрать эту минимальную дату и максимальную дату, где дата между getdate(). только один день мин и максимальная дата – GeoVIP