2016-08-12 1 views
0

Ich muss zählen und max Aggregatfunktion in derselben Abfrage. Zum Beispiel habe ich History-Tabelle enthält Datumsspalte. Ich muss das letzte Datum abrufen sowie () mit einigen Kriterien zählen. Die Kriterien gelten nur für die Anzahl (). Ich bin in der Lage, das späteste Datum unter Verwendung der Funktion des Maximums und des Ranges abzurufen. Aber konnte beides nicht zusammenführen. Könnten Sie bitte helfen?Anzahl und max Aggregatfunktion in der gleichen Tabelle in einer Abfrage

Update:

Szenario: Kunde kauft/verkauft Anteile.

Input: Tabelle Share_history und Tabelle Kunden und Tabelle Teilen und Tabelle Share_Status

Kunde:

Cust_id |Cust_name    
    1  |A   
    2  |B  

Teilen:

Share_id|Share_Name|Owner| 
10  |ABC  |XYZ | 
20  |BCD  |MNC | 

Share_Status:

Share_Status_Id|Share_Status_Name 
1    |Buy 
2    |Sell 

Share_history:

Share_history _id|Share_id|Trans_date|Share_status_Id|Cust_id 
100    |10  |12/12/14 | 1    |1 
101    |10  |24/12/14 | 2    |1  
102    |10  |14/01/15 | 1    |1 
103    |10  |28/02/15 | 2    |1  
103    |10  |16/03/15 | 1    |1 

Ausgang: neueste TRANS_DATE und count (kein Mal spezifische Aktie gekauft wurde (1)) und cust_id = 1.

Abfrage:

select share1.Share_id,SHAREHIST.Latest_Date,SHAREHIST.buycount 
from Share share1 left outer join 
    (select share_id,max(Trans_date) keep(dense_rank last order by share_id) as Latest_Date, 
      (select count(*) as buycount from Share_history where Share_status_id=1 and Share_id=share1.Share_id) 
     from Share_history 
     group by Share_id 
    ) SHAREHIST 
    on SHAREHIST.share_id=share1.share_id 

ERWARTET:

Share_id|Latest_Date|buycount  
10  |16/03/15 | 3  
+2

Probentabellendaten hinzufügen und das erwartete Ergebnis. Kennzeichne auch die dbms. Und zeigen Sie uns Ihren aktuellen Abfrageversuch. – jarlh

Antwort

0

Versuchen Sie dies mit:

SELECT 
    Share_id 
    ,Trans_Date 
    ,COUNT(Share_id) buycount 
FROM 
(
    SELECT 
     * 
    FROM Share_history SH 
    WHERE Trans_Date = (SELECT MAX(Trans_Date) FROM Share_history) 
) SH 
GROUP BY Share_id, Trans_Date 

Rest des Joins Ich denke, Sie hinzufügen können.

0

Ich glaube, Sie nur Aggregation wollen:

select sh.share_id, max(trans_date) as trans_date, count(*) as buy_count, 
from share_history sh 
where cust_id = 1 
group by sh.share_id; 
Verwandte Themen