我正在尝试使用SSRS在我们的票务系统上生成报告。我正在从“事件机构”表和“事件详细信息”表中引入字段。我在寻找的是该票是否已经滑过SLA以回应客户。在SSRS SQL查询中限制结果
我检查买票过去SLA两种方式:
1)门票是过去的SLA日期并没有相匹配的预定类型
2)票有详细记录相匹配的预定详细记录类型,但它是在SLA日期之后
我能够在下面构建CTE部分,但我正在努力如何将结果减少到最早的匹配行/记录。一张票只能在报告中显示一次。
例如:
约翰尼更新博客上使用2016年1月1日的CONTACTED_TM RECORDTYPE票。 SLA是12/31/2015。第二天(1/2/2016)他还使用EMAILOUT记录类型向TM发送电子邮件。 CTE返回这两行/记录。我只想要第一个结果。
我的查询代码如下。我曾尝试在CTE中使用SELECT TOP 1,但它只是导致它无法返回结果。
WITH CTE (Date, [Action ID], Description, Note, [Login ID], [Seq.Group], [Incident #], ResponseDue) AS
(
SELECT Date, [Action ID], [Incident Details].Description, [Incident Details].Note, [Login ID], [Incident Details].[Seq.Group], [Incident Details].[Incident #], [Incident].[Due Date & Time:] as ResponseDue
FROM [_SMDBA_].[Incident Details]
JOIN [_SMDBA_].[Incident]
ON [Incident Details].[Incident #] = [Incident].[Incident #]
WHERE ([Action ID] = 'CONTACTED_TM' OR [Action ID] = 'TM_UNAVAILABLE' OR ([Action ID] = N'EMAILOUT' AND _SMDBA_.[Incident].[Client Email] in ([Email To Email From])))
--AND Date >= Incident.[Due Date & Time:]
)
SELECT
I.[Incident #]
,I.[Group Name]
,I.[Seq.Group] as IncidentGroupSeq
,I.[Due Date & Time:] as ResponseDue
,I.[Priority ID:]
,I.[Priority Duration]
,I.[Subject ID]
,I.[Open Date & Time] as OpenDate
,I.[Impact ID:] as Impact
,I.[Urgency ID:] as Urgency
,CTE.[Action ID]
,CTE.Description
,CTE.Note
,CTE.[Login ID]
,CTE.Date AS IncidentDetailsDate
,CTE.[Seq.Group] as DetailsGroupSeq
,_SMDBA_.CalcWorkingSeconds(1001,[Due Date & Time:],CTE.Date) as WorkingSecs
,CASE
WHEN CTE.date >= I.[Due Date & Time:] THEN 'Response was Late'
WHEN CTE.Date IS NULL THEN 'There was no response'
WHEN CTE.date <= I.[Due Date & Time:] THEN 'Met SLA'
WHEN I.[Due Date & Time:] IS NULL THEN 'No Response date set'
END AS SLAStatus
FROM [_SMDBA_].Incident I
LEFT OUTER JOIN CTE
ON CTE.[Incident #] = I.[Incident #]
WHERE
I.[Open Date & Time] >= @StartDate
AND I.[Open Date & Time] <= @EndDate
AND I.[Group Name] in (@Group)
AND I.[Impact ID:] in (@Impact)
AND I.[Urgency ID:] in (@Urgency)
AND I.[Opened Group:] = 'SERVICE DESK'
定义“** First **”。你需要在CTE上添加诸如'row_numer()之类的东西(由I [按照日期描述的[事件#]顺序)'作为RN',然后在你选择的底部使用'where RN = 1' CTE – scsimon