我有一张包含通话记录的表格。每个电话都有一个状态' 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
答案 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扩展。 select
和having
条款中的列,除非您有意且谨慎地使用该功能。