表中选择行之间差异的总和

时间:2014-03-22 20:09:12

标签: mysql sql sum

我有一张包含通话记录的表格。每个电话都有一个状态' CALLSTART和CALLEND,每次通话都有一个独特的“callid'”。此外,每个记录都有一个独特的自动增量' id。每行都有一个MySQL TIMESTAMP字段。

在之前的一个问题中,我问过一种计算电话总秒数的方法。这就是这个SQL:

SELECT SUM(TIME_TO_SEC(differences)) 
FROM
(
    SELECT SEC_TO_TIME(TIMESTAMPDIFF(SECOND,MIN(timestamp),MAX(timestamp)))as differences 
    FROM table
    GROUP BY callid
)x

现在我想知道如何做到这一点,仅针对callid&#39> ,其中也有一行状态为CONNECTED。

表格的屏幕截图:http://imgur.com/gmdeSaY

1 个答案:

答案 0 :(得分:2)

使用having子句:

SELECT SUM(difference)
FROM (SELECT callid, TIMESTAMPDIFF(SECOND, MIN(timestamp), MAX(timestamp)) as difference 
      FROM table
      GROUP BY callid
      HAVING SUM(state = 'Connected') > 0
     ) c;

如果您只想要几秒钟的差异,我会稍微简化计算。

编辑:(对于Mihai)

如果你输入:

HAVING state in ('Connected')

然后state的值来自每个callid的任意行。不是所有行,只是一个任意行。你可能会或可能不会幸运。作为一般规则,避免使用允许"裸"的MySQL扩展。 selecthaving条款中的列,除非您有意且谨慎地使用该功能。