2013-04-09 30 views
3
CallID StartTime   EndTime     Querytime 
    1692 2012-11-20 11:52:00.000 2012-11-20 11:52:00.300 0.300 
    1693 2012-11-20 11:52:00.000 2012-11-20 11:52:00.100 0.100 
    1694 2012-11-20 11:52:00.000 2012-11-20 11:52:00.400 1.5 
    1695 2012-11-20 11:52:01.000 2012-11-20 11:52:01.400 3 
    1696 2012-11-20 11:52:01.000 2012-11-20 11:52:01.300 5 

我想获得像下面的StartTime分组的最大查询时间,但我仍然希望显示CallID。最大的SQL服务器没有组通过

 StartTime     MaxQueryTime 
    2012-11-11 19:04:07.000 0.300 
    2012-11-11 19:04:10.000 0.200 
    2012-11-11 19:08:48.000 0.300 
    2012-11-11 19:08:51.000 0.300 
    2012-11-11 19:09:27.000 0.100 

    SELECT  StartTime, MAX(Querytime) AS QueryTime 
    FROM   dbo.Calls 
    GROUP BY StartTime 
+2

如果两个查询时间在相同的开始时间相同,您希望看到什么? – Mark 2013-04-09 14:37:52

+0

如果callid在呼叫中,那么只需在SELECT之后和StartTime之前添加CallID, – 2013-04-09 14:38:27

回答

2
WITH records 
AS 
(
    SELECT CallID, StartTime, EndTime, QueryTime, 
      DENSE_RANK() OVER (ORDER BY QueryTime DESC) rn 
    FROM TableName 
) 
SELECT CallID, StartTime, EndTime, QueryTime 
FROM records 
WHERE rn = 1 
0
select CallID, StartTime, max(QueryTime) over (partition by StartTime) as QueryTime 
from (
    SELECT CallID, StartTime, MAX(Querytime) as QueryTime 
    FROM dbo.Calls 
    GROUP BY CallID, StartTime 
) t 
0

而且试试这个:

选择呼叫标识,开始时间,结束时间,QueryTime
从dbo.Calls如CLL
其中CLL.QueryTime =

(选择从dbo.Calls其中dbo.Calls.StartTime = CLL顶部1 dbo.Calls.QueryTime。通过dbo.Calls.QueryTime递减顺序开始时间)

组由CLL.CallID,CLL.StartTime,CLL.EndTime,CLL.QueryTime
为了通过CLL.StartTime - 你可以拒​​绝这一行