sql - How to compare temporary columns created from select in order to calculate SLA? -
this whole query have now, first part seems fine starting "y as" shows columns underlined red. have marked statements in bold shows red underline. need calculate percentage of sla not able figure out query. business hours saturday-sunday 4:30 5:30pm , mon-friday 4:30am 10:30pm.
select [job_ticket].[job_ticket_id], [job_ticket].[report_date], [job_ticket].[first_response_date], [job_ticket].close_date, ,[job_ticket].last_updated, [priority_type].[priority_type_name] 'ticket_priority' , datediff(minute, report_date,first_response_date) 'time_to_accept' , sum (case when (datediff(minute,report_date,first_response_date) <= '10' ) 1 else 0 end) "sla time_to_accept status", datediff(minute,[job_ticket].[first_response_date],[job_ticket].[close_date]) 'time_to_resolve' , (case when priority_type_name='low' sum(case when datediff(minute,[job_ticket].[first_response_date],[job_ticket].[close_date]) <= '960' 1 else 0 end ) when priority_type_name='medium' sum(case when datediff(minute[job_ticket].[first_response_date],[job_ticket].[close_date]) <= '480' 1 else 0 end ) when priority_type_name='high' sum(case when datediff(minute,[job_ticket].[first_response_date],[job_ticket]. [close_date]) <= '120' 1 else 0 end ) when priority_type_name='urgent' sum(case when datediff(minute,[job_ticket].[first_response_date],[job_ticket]. [close_date]) <= '60' 1 else 0 end) end) "closed within sla" [swhd01].[dbo].[job_ticket] inner join [swhd01].[dbo].[status_type] on [job_ticket].[status_type_id] =[status_type].[status_type_id] inner join [swhd01].[dbo].[problem_type] on [job_ticket].[problem_type_id] = [problem_type].[problem_type_id] inner join [swhd01].[dbo].[priority_type] on [job_ticket].[priority_type_id] = [priority_type].[priority_type_id] report_date not null , datediff(minute,[job_ticket].[first_response_date],[job_ticket].[close_date]) not null , datediff(minute,[job_ticket].[first_response_date],[job_ticket].[close_date]) > 0 group job_ticket_id,[job_ticket].[report_date],[job_ticket].[first_response_date], [job_ticket].close_date,[job_ticket].last_updated,[priority_type].[priority_type_name]
- since need reuse
time_to_accept
,time_to_resolve
, use cte don't have repeat longdatediff
expressions. - use cte don't have repeat long
case
expressionstime_to_accept and
time_to_resolve. - finally, left out
from
statement primaryselect
; i've addedfrom sometable
placeholder.
.
with x ( select [job_ticket].[job_ticket_id], [job_ticket].[report_date], [job_ticket].[first_response_date], [job_ticket].close_date, [job_ticket].last_updated, [priority_type].[priority_type_name] 'ticket_priority', datediff(minute, report_date,first_response_date) 'time_to_accept', datediff(minute,[job_ticket].[first_response_date],[job_ticket].[close_date]) 'time_to_resolve' sometable ), y ( select x.job_ticket_id, x.report_date, x.first_response_date, x.close_date, x.last_updated, x.ticket_priority, x.time_to_accept, x.time_to_resolve, case when time_to_accept <= 10 1 else 0 end "sla time_to_accept status", case when time_to_resolve <= case priority_type_name when 'low' 960 when 'medium' 480 when 'high' 120 when 'urgent' 60 end 1 else 0 end "closed within sla" ) select y.job_ticket_id, y.report_date, y.first_response_date, y.close_date, y.last_updated, y.ticket_priority, y.time_to_accept, y.time_to_resolve, y.[sla time_to_accept status], y.[closed within sla], case when [sla time_to_accept status]=1 , [closed within sla]=1 1 else 0 end [sla compliant] y
Comments
Post a Comment