2014-02-09 158 views
-1

有表所示:如何选择最多的日期和最小日期

user_id    Date    Status 
    1000  2013-04-02 11:46:10.000  IN 
    1001  2013-04-02 11:50:08.000  OUT 
    1005  2013-04-02 11:46:24.000  IN 
    1005  2013-04-02 12:50:04.000  OUT 
    1005  2013-04-02 12:50:10.000  OUT 
    1045  2013-04-02 14:46:05.000  IN 

我想要的选择分钟日期OUT

回答

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

编辑: 要检查分钟和最大日期在您选择的日期范围内,使用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 

此检查,如果两个日期重叠......

+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