【问题标题】:Select max value for each company in list, display longest value per company per day选择列表中每个公司的最大值,显示每个公司每天的最大值
【发布时间】:2021-02-23 22:21:07
【问题描述】:

我已经查看了与此类似的其他一些问题,但我发现没有什么可以让我到达那里。

我有一个包含多列的表,但其中 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)

然而,这并不能完全告诉我我需要什么。

【问题讨论】:

    标签: sql sql-server tsql datetime greatest-n-per-group


    【解决方案1】:

    您可以使用窗口函数。对于您的示例数据,如下所示:

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

    【讨论】:

    • @DavidCady:这会产生您想要的样本数据结果,正如您在这个 db fiddle 中看到的那样:dbfiddle.uk/…
    • 这很完美。非常感谢。我能够用它来做我需要的事情。
    【解决方案2】:

    你想要它的日期,所以使用:

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

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

    【讨论】:

    • 这是我试图根据需要更改的类似问题的最后一个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2021-10-11
    • 2011-05-29
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多