2016-04-07 11 views
2

. ve günün saatine()) a) şimdiki zaman aralığını (zaman ve önceki zaman aralığı b:Kovan için çok yeni bir seçim belirtisi

from_date | to_date | customer_name | callcount 
------------------------------------------------------- 
2016_01_01 | 2016_01_02 | ABC   | 25 
2016_01_02 | 2016_01_03 | ABC   | 53 
2016_01_03 | 2016_01_04 | ABC   | 44 
2016_01_04 | 2016_01_05 | ABC   | 55 

aşağıda gösterildiği gibi Bunun kabul edecek bir kovan sorgu inşa etmek isteyen istatistikleri adında bir tabloya sahip) c) müşteri adı eg için

: zaman ( geçerli zaman aralığı zaman (2016_01_03 olabilir) ve zamana (2016_01_05) geçerli zaman aralığı zaman (2016_01_01 arasında olabilir); ve girişleri olacak 2016_01_02) müşteri adı, ABC

olabilir

Ve görüntülemek istediğiniz sonucudur: current_call_count (şimdiki zaman aralığı için çağrı sayıları toplamı), previous_call_count ve current_call_count & previous_call_count böyle

arasındaki fark (önceki zaman aralığı için çağrı sayıları toplamı):

customer | current_call_count | previous_call_count | Diff 
--------------------------------------------------------- 
ABC  | 99     | 25     | 74 

i inşa sorgulama:

select * from 
(
select sum(callCount) as current_count from stats 
where customer_name='ABC' and from_date>='2016-04-03' and to_date<='2016-04-05' 
UNION ALL 
select sum(callCount) as current_count from stats 
where customer_name='ABC' and from_date>='2016-04-01' and to_date<='2016-04-02' 
) FINAL 

elimden gelmiyor Hesaplamayı elde etmek ve sonucu sütun olarak görüntüleyememek.

cevap

0

koşullu toplanmasına deneyin yardımcı olun: sizin örnek verileri bir tarih ayırıcı olarak (Sorgununuzdaki kullanılır) _ yerine - kullanır

select 
    sum(case when from_date >= '2016_01_04' and to_date <= '2016_01_05' then callcount else 0 end) 
    as current_call_count, 
    sum(case when from_date >= '2016_01_02' and to_date <= '2016_01_03' then callcount else 0 end) 
    as previous_call_count, 
    sum(case when from_date >= '2016_01_04' and to_date <= '2016_01_05' then callcount else 0 end) 
    - sum(case when from_date >= '2016_01_02' and to_date <= '2016_01_03' then callcount else 0 end) 
    as difference 
from stats 
where customer_name = 'ABC' 

Not.

İlgili konular