2017-01-02 4 views
1

ich den TischDifferenz zwischen den Reihen mit dem gleichen Wert

create table fct_bonus (
    date timestamp not null, 
    type varchar(10) not null, 
    amount numeric(19,2) not null, 
    userid varchar(30) not null 
) 

Typ sein IN oder OUT-kann, ist Menge immer> 0

Ich brauche Summen von In und Outs für Benutzer-ID zu finden 123 auf Datum 2016-08-01 ', und auch die balans, die als alle minus minus alle outs von userid123 zählen sollten. Ich verwende die Abfrage

select distinct userid, type, sum(amount) 
from fct_bonus 
where userid = 123 and date <= '2016-08-01' 
group by type 

aber ich weiß nicht, wie die balans zu zählen. Bitte, helfen Sie.

+1

Bearbeiten Sie Ihre Frage und (1) Beispieldaten zur Verfügung stellen; (2) gewünschte Ergebnisse; und (3) tag mit der Datenbank, die Sie verwenden. –

Antwort

3

Dies scheint zu tun, was Sie beschreiben:

select userid, 
     sum(case when type = 'IN' then 1 else 0 end) as ins, 
     sum(case when type = 'OUT' then 1 else 0 end) as outs, 
     sum(case when type = 'IN' then amount when type = 'OUT' then - amount end) as balance 
from fct_bonus 
where userid = 123 and date <= '2016-08-01' 
group by userid; 
+0

Vielen Dank, es hilft! –

Verwandte Themen