2017-04-27 146 views
-4

我有一个记录如下选择最大和最小日期时间

Login Time     Logout Time   User Shift 
2017-04-01 21:30:00.000 2017-04-02 00:00:00.000 I0402 N 
2017-04-02 00:00:00.000 2017-04-02 00:30:00.000 I0402 N 
2017-04-02 01:30:00.000 2017-04-02 05:30:00.000 I0402 N 
2017-04-02 06:30:00.000 2017-04-02 08:30:00.000 I0402 N 

我想获得用户最早进入时间和最新的注销时间。我如何做到这一点?

我想如下

Login Time     Logout Time    User Shift 
2017-04-01 21:30:00.000  2017-04-02 08:30:00.000 I0402 N 

记录是有可能做到这一点? 谢谢。


编辑

我有最大值和最小值和组尝试之前用户与转移,这是工作。如果超过1天记录,它似乎是行不通

2017-04-01 21:30:00.000 2017-04-02 00:00:00.000 I0402 N 
2017-04-02 00:00:00.000 2017-04-02 00:30:00.000 I0402 N 
2017-04-02 01:30:00.000 2017-04-02 05:30:00.000 I0402 N 
2017-04-02 06:30:00.000 2017-04-02 08:30:00.000 I0402 N 
2017-04-02 21:30:00.000 2017-04-03 00:00:00.000 I0402 N 
2017-04-03 00:00:00.000 2017-04-03 00:30:00.000 I0402 N 
2017-04-03 01:30:00.000 2017-04-03 05:30:00.000 I0402 N 

预期结果如下

2017-04-01 21:30:00.000  2017-04-02 08:30:00.000 I0402 N 
2017-04-02 21:30:00.000  2017-04-03 05:30:00.000 I0402 N 
+5

提示:MIN(),MAX()和Group BY –

+1

是的,可以使用'group by'和'min()','max()'函数 –

+2

请提及您正在使用的DMBS。 –

回答

3
SELECT 
User 
,MIN(Login Time) 
,MAX(Logout Time) 
,Shift 
FROM 
    dbo.table 
GROUP BY 
User,Shift 
+0

移位栏位在哪里? – jarlh

0

我的用户和Shift键与最大和最小和组尝试之前,这是工作。如果超过1天记录,它似乎是行不通

2017-04-01 21:30:00.000 2017-04-02 00:00:00.000 I0402 N 
2017-04-02 00:00:00.000 2017-04-02 00:30:00.000 I0402 N 
2017-04-02 01:30:00.000 2017-04-02 05:30:00.000 I0402 N 
2017-04-02 06:30:00.000 2017-04-02 08:30:00.000 I0402 N      
2017-04-02 21:30:00.000 2017-04-03 00:00:00.000 I0402 N 
2017-04-03 00:00:00.000 2017-04-03 00:30:00.000 I0402 N 
2017-04-03 01:30:00.000 2017-04-03 05:30:00.000 I0402 N 

预期的结果如下

2017-04-01 21:30:00.000  2017-04-02 08:30:00.000 I0402 N 
2017-04-02 21:30:00.000  2017-04-03 05:30:00.000 I0402 N 
+0

这不是答案。编辑你的请求并把它放在那里。 –

0

您可以使用下面的查询来获得结果,

SELECT T1.USER, T2.MAX_LOGIN_TIME, T3.MIN_LOGIN_TIME FROM 
TABLE_NAME T1 
INNER JOIN (SELECT MAX(LOGIN_TIME) AS MAX_LOGIN_TIME,USER FROM TABLE_NAME 
GROUP BY USER) T2 
ON (T1.USER = T2.USER) 
INNER JOIN (SELECT MIN(LOGIN_TIME) AS MIN_LOGIN_TIME,USER FROM TABLE_NAME 
GROUP BY USER) T3 
ON (T1.USER = T3.USER); 
0

看起来你真正想要的是每天一个结果行,用户和转移。所以,按照这些组合,并采取最小和最大时间。

select min(Login_time) as login, max(logout_time) as logout, user, shift 
from mytable 
group by date(login_time), user, shift 
order by date(Login_time), user, shift; 

这里DATE(login_time)仅仅是一个例子。如何从日期时间获取日期不同于DBMS和DBMS。查找DBMS的日期/时间函数以获得适当的功能。

相关问题