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()
允许顶部连接(如果有)。
我已经查看了其他一些与此类似的问题,但我发现的任何问题都无法解决问题。
我有一个包含多列的 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()
允许顶部连接(如果有)。