【问题标题】:Get MIN value for each id获取每个 id 的 MIN 值
【发布时间】:2014-09-12 01:26:50
【问题描述】:

我正在尝试获取每次通话的最短时间。每个呼叫都可以有几个部分都记录在同一个呼叫 ID 上。我想要做的是每个呼叫 id 的最短时间很好,但是当我以一种方式查询它时得到重复的值,或者如果我以另一种方式查询它,我只会得到最小值。

我希望最终能够按小时计算所有呼叫

这是我一直在尝试获取唯一呼叫 ID 和时间的查询,但当前返回重复项

例如:

Callid 1 = 2014-07-04 16:37:22.043

callid 2 = 2014-07-04 16:37:23.370

我想要的只是被称为 1 的值

select t.callid, (select min(timein) from loggeddata t2 where t2.callid = t.callid and t2.timein > t.timein
                    ) as 'mintime'
      from loggeddata t

【问题讨论】:

    标签: sql sql-server time min


    【解决方案1】:

    您不需要子查询,只需使用GROUP BY 定义分组表达式并将聚合添加为列:

    select t.callid, 
           min(timein) as 'mintime' 
    from loggeddata 
    GROUP BY callid
    

    【讨论】:

    • 最后也感谢这么简单的答案,这是一个更大的查询的一部分,显而易见的答案对我来说并不突出!
    【解决方案2】:
    select callid,min(timein) from loggedata group by callid;
    

    【讨论】:

    • 也感谢您的回答
    • 对不起,我标记了第一个给出答案的人,你只能有一个正确的答案,所以当我使用的那个人做同样的工作时。
    【解决方案3】:
    ;WITH CTE AS 
    (
    select t.callid, (select min(timein) from loggeddata t2 where t2.callid = t.callid and t2.timein > t.timein
                        ) as 'mintime'
          from loggeddata t
    
    )
    
    Select c.callid,c.mintime from (select
                 row_number() over (partition by mintime order by callid desc) as seqnum
          from  CTE )c
    where seqnum = 1
    

    【讨论】:

    • 您好,感谢您的回答,将其转换为 cte 是我的下一个选择,即让整体查询更简单,因为它分配了更多部分,然后只是这一点,我没有足够的声誉来标记这个答案
    • 没问题..如果它提供了您想要的解决方案,那么它就像获得积分更多:)
    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多