我已经看过其他一些与此类似的问题,但是我发现没有什么可以让我到达那里。
我有一个包含多列的表,但是其中3列是Company,Date和WaitTime。
我想为每个公司和每天选择最长的等待时间。我想显示整个日期范围内的结果,显示每个公司以及该天的最长等待时间。
主表
Company | Date | WaitTime
A 11/10 5.2
A 11/10 5.1
B 11/10 4.8
B 11/10 4.7
A 11/11 5.0
A 11/11 5.1
B 11/11 4.6
B 11/11 4.5
etc
所需结果
Date | Company | WaitTime
11/10 A 5.2
11/10 B 4.8
11/11 A 5.1
11/11 B 4.6
etc
我每天与每个公司都有数百次互动,所以我试图找到每天每个公司最长的等待时间。
我尝试过的最新版本是
SELECT
Top 1 with Ties
CAST(Timestamp as Date) As Date,
Campaign as Company,
(IVR_Time/60.0) as WaitTime
FROM [Reporting].[dbo].[New_Five9_CallLog] a WITH (NOLOCK)
Where a.Timestamp >= DATEADD(week, DATEDIFF(week,0,GETDATE())-1,-1)
AND a.Timestamp < DATEADD(week, DATEDIFF(week,0,GETDATE()),-1)
AND a.Call_Type = 'Inbound'
Order By ROW_NUMBER() over (Partition By Campaign Order by Timestamp)
但是,这并不能完全显示我的需求。
答案 0 :(得分:2)
您可以使用窗口功能。对于您的示例数据,它看起来像:
select *
from (
select t.*, rank() over(partition by company, mydate order by waittime desc) rn
from mytable t
) t
where rn = 1
date
是不明确的(因为存在一个具有相同名称的数据类型),因此我将其重命名为mydate
。如果该列实际上包含时间部分,则需要在排名之前将其删除,例如:
rank() over(partition by company, convert(date, mydate) order by waittime desc) rn
请注意,rank()
允许使用最高领带。
答案 1 :(得分:0)
您想要按日期显示,请使用:
SELECT Top 1 with Ties . . .
. . .
ORDER BY ROW_NUMBER() over (Partition By CONVERT(DATE, timestamp) Order by WaitTime DESC)
我不确定您的查询与您的问题有什么关系。它比您显示的数据复杂得多。