试试这个:
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
编辑: 要检查分钟和最大日期在您选择的日期范围内,使用s例如的Econd在末尾加上where条件:(如果我理解正确的)
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