Select 列表中每家公司的最大值,每天显示每家公司的最长值

Select max value for each company in list, display longest value per company per day

我已经查看了其他一些与此类似的问题,但我发现的任何问题都无法解决问题。

我有一个包含多列的 table,但其中 3 列是公司、日期和 WaitTime。

我想select每家公司每天最长的等待时间。我想显示整个日期范围的结果,显示每家公司和那一天的最长等待时间。

主要Table

 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)

然而,这并没有完全告诉我我需要什么。

你想要按日期,所以使用:

SELECT Top 1 with Ties . . . 
. . .
ORDER BY ROW_NUMBER() over (Partition By CONVERT(DATE, timestamp) Order by WaitTime DESC)

我不确定你的查询与你的问题有什么关系。它比您显示的数据复杂得多。

您可以使用 window 函数。对于您的样本数据,这看起来像:

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() 允许顶部连接(如果有)。