[英]SQL server query by ranking and grouping based upon conditions
我正在嘗試創建一個SQL查詢,該查詢將根據創建的日期對記錄進行排名,然后在記錄交互(請求和響應)的表中按eventId分組
將從創建的響應日期-創建的請求日期中得出日期計算,但是可能有多個響應和請求實例
我已經設法完成了第一部分,即識別事件並對其進行排序,但是無法確定如何進行分組。 請參閱下面的查詢和結果集:
WITH rows
AS (
SELECT ID,
IncidentId,
Cust,
Channel,
TTypeID,
DateCreated,
RANK() OVER (PARTITION BY IncidentId ORDER BY Id) AS 'rownum',
ROW_NUMBER() OVER (PARTITION BY IncidentId ORDER BY DateCreated) AS Counts
FROM [dbo].[Thread]
WHERE TypeId IN (3, 4, 2, 1)
)
SELECT *
FROM (
SELECT DISTINCT a.ID,
a.incidentId,
a.Channel,
a.rownum,
a.TypeID,
a.datecreated
FROM rows a
JOIN rows b
ON a.incidentId = b.incidentId
WHERE a.TypeId IN (3, 4, 2)
) AS base
ID Incident Channel Rownum Type DateCreated
24108571 9436560 Form 1 3 2015-04-22 13:41:29.000
24109189 9436560 E-mail 2 2 2015-04-22 13:48:21.000
24109788 9436560 Form 3 3 2015-04-22 13:49:39.000
24109789 9436560 Email 4 2 2015-04-22 13:50:37.000
我希望能夠再次對結果進行排名,以便確定請求響應的數量。
輸出應如下所示:
ID Incident Channel Rownum Type DateCreated WaitTimeGrouping
24108571 9436560 Form 1 3 2015-04-22 13:41:29.000 0
24109189 9436560 E-mail 2 2 2015-04-22 13:48:21.000 1
24109788 9436560 Form 3 3 2015-04-22 13:49:39.000 0
24109789 9436560 Email 4 2 2015-04-22 13:50:37.000 2
一個選擇入門的示例如下所示:
SELECT
req.Incident,
MAX( resp.DateCreated - req.DateCreated ),
MIN( resp.DateCreated - req.DateCreated ),
AVG( resp.DateCreated - req.DateCreated )
FROM Thread req
INNER JOIN Thread resp
ON req.Incident = resp.Incident
AND resp.Rownum = req.RowNum+1
WHERE req.Type = 3 -- "Request"?
AND resp.Type = 2 -- "Response"?
GROUP BY req.Incident
注意,我們只是假設響應的Rownum
始終是請求的Rownum
+1。 如果不能保證這一點,則需要另一個(子)查詢來找到請求和響應記錄之間的匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.