I ran into a weird issue today. Please help figuring out the FirstTimeReported
column. http://sqlfiddle.com/#!3/2e9845/1
Table columns:
SupportID int primary key,
DateEntered datetime,
ReportedTime varchar(4)
Input data
SupportID DateEntered ReportedTime
1001 2015-04-13 09:15:00 0900
2001 2015-04-14 00:10:00 2355
Expected results:
SupportID FirstTimeReported
1001 2015-04-13 09:00:00
2001 2015-04-13 23:55:00
Update: Here is the Working solution 2 that I just modified from @Dan Guzman's code:
SELECT
SupportID
, CASE
WHEN DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))) <= DateEntered THEN DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime)))
ELSE DATEADD(day, -1, DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))))
END AS FirstTimeReported
FROM SupportContacts;
I assume the calculated FirstTimeReported should be in the past, derived from the DateEntered. This assumes of course that the row is entered within 24 hours of the ReportTime.
WITH
SupportContactsFirstTimeReported AS (
SELECT
SupportID
, DateEntered
, DATEADD(minute, CAST(RIGHT(ReportedTime, 2) AS int), DATEADD(hour, CAST(LEFT(ReportedTime, 2) AS int), CAST(CAST(DateEntered AS date) AS datetime))) AS CalculatedReportedTime
FROM supportContacts
)
SELECT
SupportID
, CASE
WHEN CalculatedReportedTime <= DateEntered THEN CalculatedReportedTime
ELSE DATEADD(day, -1, CalculatedReportedTime)
END AS FirstTimeReported
FROM SupportContactsFirstTimeReported;