2014-01-22 21 views
0

我有這張表,它有一個基於call_type記錄秒的持續時間。現在我想顯示呼叫類型的傳入和傳出,它的持續時間在一行中。搜索查詢條件列是否可能?

調用表

|ID | originating call | terminating call | call type | duration_seconds 
| 1 | 123    |  123   | incoming  |  60 
| 2 | 123    |  123   | outgoing  |  120 
| 3 | 123    |  321   | incoming  |  210 
| 4 | 123    |  321   | incoming  |  140 

,其結果將是

|ID | originating call | terminating call | incoming | duration | outgoing | duration 
| 1 | 123    |  123   |  1  |  60  |  1  | 120 
| 2 | 123    |  321   |  2  |  350 |  0  | 0 

這是我的查詢爲止。

select @id := @id + 1 as id, 
    originating, terminating, 
    sum(calltype = 'incoming') as incoming, 
    sum(calltype = 'outgoing') as outgoing, 
from calltable ct cross join 
(select @id := 0) const 
group by originating, terminating; 


originating call | terminating call | incoming | outgoing 
     123   |  123   |  1  | 1 
     123   |  321   |  2  | 0 

回答

1

只是簡單地添加基於就像你的傳入和傳出,除了代替數數1 CALLTYPE另外2列,使用duration_seconds

select row_number() over (order by (select NULL)) as id, 
    originating, terminating, 
    sum(case when calltype = 'incoming' then 1 else 0 end) as incoming, 
    sum(case when calltype = 'incoming' then duration_seconds else 0 end) as in_duration, 
    sum(case when calltype = 'outgoing' then 1 else 0 end) as outgoing, 
    sum(case when calltype = 'outgoing' then duration_seconds else 0 end) as out_duration 
from calltable ct 
group by originating, terminating; 

根據更新後的問題,這裏的mysql的。

select @id := @id + 1 as id, 
    originating, terminating, 
    sum(calltype = 'incoming') as incoming, 
    sum(if(calltype = 'incoming',duration_seconds,0)) as in_duration, 
    sum(calltype = 'outgoing') as outgoing, 
    sum(if(calltype = 'outgoing',duration_seconds,0)) as out_duration 
from calltable ct cross join 
(select @id := 0) const 
group by originating, terminating; 
+0

太好了。生病試試這個。 – Vincent

+1

先生,這是mysql嗎? – Vincent

+1

等待,不,它不是mysql,因爲它有row_number()而不是mysql。 –