March 14, 2012 at 4:47 pm
I have a table that has EmployeeID, EmployeeLoginDateTime and What JobFunction they logged in under. JobFunction is like Developing, Coding, Programming, Adminstering and LogOut.I need to write a query which pulls all the users and the day that they didn't log out.
Any help would be approciated.
March 14, 2012 at 5:01 pm
Compare the Login date and logout date using where clause.. To get the day out from the Login date use string functions.. I think it works,...
March 14, 2012 at 5:02 pm
SQL_Surfer (3/14/2012)
Any help would be approciated.
Sure. But help us first!
There is menu card in that hotel! I want you to buy me a lunch from that menu card! Can you?
March 14, 2012 at 5:04 pm
SQL_Surfer (3/14/2012)
I have a table that has EmployeeID, EmployeeLoginDateTime and What JobFunction they logged in under. JobFunction is like Developing, Coding, Programming, Adminstering and LogOut.I need to write a query which pulls all the users and the day that they didn't log out.Any help would be approciated.
if they didnt log out...can we assume "LogOut" is Null?
________________________________________________________________
you can lead a user to data....but you cannot make them think
and remember....every day is a school day
March 14, 2012 at 7:26 pm
If they forget to Logout, there won't be LogOut records. Or No record for the employee for that day with LogOut jobfunction. I have attached the sample data.
March 14, 2012 at 8:41 pm
To get the day out from the Login date use string functions
March 14, 2012 at 8:43 pm
Question is find out all the records for an employee where he didn't log out on a certain day.
March 14, 2012 at 9:05 pm
This?
DECLARE @TableA TABLE
(
EmployeeIDINT
,EmployeeLoginDateTimeDATETIME
,JobFunction VARCHAR(25)
)
INSERT @TableA
SELECT 123,'2012-02-01 01:00:24','Coding'
UNION ALL SELECT 123,'2012-02-01 3:00:00','Programming'
UNION ALL SELECT 123,'2012-02-01 5:00:00' ,'LogOut'
UNION ALL SELECT 234,'2012-02-01 01:00:24','Coding'
UNION ALL SELECT 234,'2012-02-01 3:00:00','Programming'
UNION ALL SELECT 234,'2012-02-01 5:00:00' ,'Coding'
SELECT EmployeeID
,EmployeeLoginDateTime
,JobFunction
FROM @TableA OutTab
WHERE NOT EXISTS ( SELECT 1 FROM @TableA InrTab
WHERE InrTab.JobFunction = 'LogOut'
AND InrTab.EmployeeID = OutTab.EmployeeID)
March 14, 2012 at 9:11 pm
Not quiet. Here, on 2/1, employee 234 didn't logout. So, it should just return 234, 2012/02/01, 'Din't LogOut'. This query is returning all other records but LogOut. I wanted just the ones where they didn't LogOut.
March 14, 2012 at 9:17 pm
If there are 20 days that they did not logout, you need all of those 20 days? and u need it for all employees?
Or u need those days that the employee signed in , but forgot to logout?
March 14, 2012 at 9:19 pm
Those days employee logged in but didn't logout.
March 14, 2012 at 9:28 pm
Then this?
DECLARE @TableA TABLE
(
EmployeeIDINT
,EmployeeLoginDateTimeDATETIME
,JobFunction VARCHAR(25)
)
INSERT @TableA
SELECT 123,'2012-02-01 01:00:24','Coding'
UNION ALL SELECT 123,'2012-02-01 3:00:00','Programming'
UNION ALL SELECT 123,'2012-02-01 5:00:00' ,'LogOut'
UNION ALL SELECT 234,'2012-02-01 01:00:24','Coding'
UNION ALL SELECT 234,'2012-02-01 3:00:00','Programming'
UNION ALL SELECT 234,'2012-02-01 5:00:00' ,'Coding'
UNION ALL SELECT 234,'2012-02-02 01:00:24','Coding'
UNION ALL SELECT 234,'2012-02-02 3:00:00','Programming'
UNION ALL SELECT 234,'2012-02-02 5:00:00' ,'Coding'
UNION ALL SELECT 234,'2012-02-03 5:00:00' ,'Coding'
UNION ALL SELECT 234,'2012-02-04 5:00:00' ,'Coding'
UNION ALL SELECT 234,'2012-02-04 7:00:00' ,'Logout'
UNION ALL SELECT 567,'2012-02-01 3:00:00','Programming'
UNION ALL SELECT 567,'2012-02-01 5:00:00' ,'LogOut'
UNION ALL SELECT 567,'2012-02-02 3:00:00','Programming'
UNION ALL SELECT 789,'2012-02-01 3:00:00','Programming'
SELECT EmployeeID
,CrsApp.EmployeeLoginDateTime
,'Missed LogOut' JobFunction
FROM @TableA OutTab
CROSS APPLY ( SELECT DATEADD(DD,DATEDIFF(DD,0,OutTab.EmployeeLoginDateTime),0) ) CrsApp (EmployeeLoginDateTime)
WHERE NOT EXISTS
( SELECT 1
FROM @TableA InrTab
WHERE InrTab.JobFunction = 'LogOut'
AND InrTab.EmployeeID = OutTab.EmployeeID
AND DATEADD(DD,DATEDIFF(DD, 0 ,InrTab.EmployeeLoginDateTime),0) = CrsApp.EmployeeLoginDateTime)
GROUP BY EmployeeID
,CrsApp.EmployeeLoginDateTime
March 14, 2012 at 9:42 pm
Another solution
; WITH CTE AS
(
SELECT EmployeeID
,EmployeeLoginDateTime = DATEADD(DD,DATEDIFF(DD,0,OutTab.EmployeeLoginDateTime),0)
,JobFunction = CASE WHEN JobFunction = 'Logout' THEN 1
ELSE 0
END
FROM @TableA OutTab
)
SELECT EmployeeID
, EmployeeLoginDateTime
, 'Missed LogOut' Comment
FROM CTE
GROUP BY EmployeeID , EmployeeLoginDateTime
HAVING SUM(JobFunction) = 0
This solution is definitely faster than the previous one!
Table '#32AB8735'. Scan count 2, logical reads 17, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 86 ms.
Table '#32AB8735'. Scan count 1, logical reads 1, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 65 ms.
March 14, 2012 at 9:47 pm
Yep. Thats it. Thanks for your help.
March 14, 2012 at 9:49 pm
SQL_Surfer (3/14/2012)
Yep. Thats it. Thanks for your help.
You're welcome.. One question - did u use the first one or the second?
Viewing 15 posts - 1 through 15 (of 20 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy