2017-07-17 3 views
0

Je suis nouveau à SQL, j'ai besoin de votre expertise pour atteindre l'exigence ci-dessous. Aidez-moi, s'il vous plaît .Trouver Dupliquer avec l'agrégation complexe

J'ai deux ensemble de données: ensemble de données 1:

id Item Amount 
1 apple 100 
2 apple -100 
3 apple 200 
4 apple -200 
5 apple 100 

sortie doit être null

ensemble de données 2:

id Item Amount 
1 apple 100 
2 apple -100 
3 apple 200 
4 apple -200 
5 apple 100 
6 apple 100 

sortie doit être

id Item Amount 
6 apple 100 

Fonctionnalité: pour un élément « pomme » j'ai payé 100 (1) et en raison d'une condition que je suis retourné la pomme au propriétaire du magasin donc je reçois mon argent -100 (2),

à nouveau J'achète une pomme donc le montant sera de 200 (3) (Montant augmenté), encore une fois je le retourne donc -200 (4).

enfin je paie 100 (5) et achète encore apple .mais cette fois le système duplique mon paiement final 100 (5) comme 100 (6).

Je dois trouver si le système dédouble ma transaction ou non et afficher la transaction en double

+1

Tout d'abord, vous avez besoin d'un critère fiable pour les dubles. Que faire si vous achetez vraiment 2 'apple 100'? – Serg

+0

Corrigez le système en cours de duplication, les enregistrements ne doivent pas être sauvegardés en premier lieu. –

+0

@Serg: J'achète une pomme. le coût différera en fonction du temps. – user7334955

Répondre

0

Vous semble vouloir la dernière ligne lorsque le nombre de montants positifs dépasse le nombre de montants négatifs de plus de 1 :

select t.* 
from (select t.* 
     from t 
     order by id desc 
    ) t 
where rownum = 1 and 
     (select sum(case when amount > 0 then 1 
         when amount < 0 then -1 
        end) 
     from t 
    ) >= 2