2014-02-09 8 views

ответ

2

попробовать это:

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 

эту проверку, если две даты пересекаться ...

+0

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

0

Супер простой

SELECT Max(Date) FROM MyTable WHERE Status = 'OUT' 
SELECT Min(Date) FROM MyTable WHERE Status = 'IN' 

С по выбору

SELECT (SELECT Max(Date) FROM MyTable WHERE Status = 'OUT') AS MaxOut, 
     (SELECT Min(Date) FROM MyTable WHERE Status = 'IN') AS MinIn 
+0

Я хочу, чтобы все данные в одном выбрать не в двух выбирает – GeoVIP

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