Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
Yammi
Starting Member
1 Post |
Posted - 2007-12-19 : 15:34:17
|
Ok, I know that there is a very smart programmer out there that can resovle my issue.I am trying to calculate time worked by 15 minute intervals.Example:Emp 1 started work at 13:00:00 and worked 183 minutesEmp 2 started work at 17:15:00 and worked 150 minutesEmp 3 started work at 08:30:00 and worked 17 minutesI need to show the following results:time employee #of_min_worked----------------------------------------------08:30:00 3 1508:45:00 3 209:00:00 08:30:0008:45:0009:00:0009:15:0009:30:0009:45:0010:00:0010:15:0010:30:0010:45:0011:00:0011:15:0011:30:0011:45:0012:00:0012:15:0012:30:0012:45:0013:00:00 1 1513:15:00 1 1513:30:00 1 1513:45:00 1 1514:00:00 1 1514:15:00 1 1514:30:00 1 1514:45:00 1 1515:00:00 1 1515:15:00 1 1515:30:00 1 1515:45:00 1 1516:00:00 1 316:15:0016:30:0016:45:0017:00:0017:15:00 2 1517:30:00 2 1517:45:00 2 1518:00:00 2 1518:15:00 2 1518:30:00 2 1518:45:00 2 1519:00:00 2 1519:15:00 2 1519:30:00 2 1519:45:0020:00:0020:15:0020:30:0020:45:0021:00:0021:15:0021:30:0021:45:0022:00:0022:15:0022:30:0022:45:0023:00:0023:15:0023:30:0023:45:00 |
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2007-12-19 : 16:30:33
|
[code]-- Prepare sample dataDECLARE @Sample TABLE (EmployeeID INT, StartTime DATETIME, WorkMinutes INT)INSERT @SampleSELECT 1, '13:00', 183 UNION ALLSELECT 2, '17:15', 150 UNION ALLSELECT 3, '08:30', 17-- Show the expected outputSELECT CONVERT(CHAR(5), e.FromTime, 108) AS Clock, CASE DATEDIFF(MINUTE, e.FromTime, q.EndTime) WHEN 0 THEN NULL ELSE q.EmployeeID END AS EmployeeID, CASE WHEN q.EndTime > e.ToTime THEN 15 ELSE NULLIF(DATEDIFF(MINUTE, e.FromTime, q.EndTime), 0) END AS WorkFROM ( SELECT DATEADD(MINUTE, 15 * Number, '19000101') AS FromTime, DATEADD(MINUTE, 15 * Number + 15, '19000101') AS ToTime FROM master..spt_values WHERE Type = 'p' AND Number < 96 ) AS eLEFT JOIN ( SELECT StartTime, EmployeeID, DATEADD(MINUTE, WorkMinutes, StartTime) AS EndTime FROM @Sample ) AS q ON q.StartTime < e.ToTime AND q.EndTime >= e.FromTime[/code] E 12°55'05.25"N 56°04'39.16" |
 |
|
|
|
|
|
|