我有一个表具有用户的日志时间,状态为1& 2。 如果状态为1则为logIn Time,如果状态为2,则为logOut Time。
所以我想显示登录&用户的退出时间。如果没有注销时间,则列值应为null。
这是表格结构和查询中的 Sample Demo ...
我得到所有登录时间显示的logOut时间......
我希望输出为:
CLOCKIN CLOCKOUT
9:25:41 AM 9:30:41 AM
9:35:41 AM 9:40:41 AM
9:45:41 AM
10:06:33 AM 2:59:51 PM
答案 0 :(得分:1)
您可以使用几个相关的子查询来执行此操作:
SELECT CONVERT(NVARCHAR(20),cin.logtime,108) AS CLOCKIN
,CONVERT(NVARCHAR(20),( SELECT MIN(cout.logtime)
FROM table1 cout
WHERE cin.logtime < cout.logtime
AND cout.statusId = 2
AND NOT EXISTS (SELECT * FROM table1 cin2
WHERE cin2.logtime > cin.logtime
AND cin2.logtime < cout.logtime
AND cin2.statusId = 1
)
),108) AS CLOCKOUT
FROM table1 cin
WHERE cin.statusId = 1
大多数外部查询获取所有检查,第一个子查询(外部)获取签入后的最小结账,第二个子查询(大多数内部)只是在之后有签到的时候 - 在第三行中取消而不是重复14时59
<强> SQLFiddle Demo 强>
答案 1 :(得分:0)
对CONVERT
函数使用样式22:
select convert (varchar (20), cast (getdate() as time) , 22)
或者只是将其插入到您的代码中:
convert (varchar (20), cast (rt.rt.logTime as time ), 22)
,convert (varchar (20), cast (rt1.rt.logTime as time ), 22)