2016-07-19 7 views
0

Ich versuche eine Abfrage zu erstellen, um eindeutige Transaktionswerte mit dem Verkaufswert und dem letzten Datum zu erhalten.Abfrage der eindeutigen Werte mit den letzten Einträgen

Hier ist meine Frage:

select transaction, sales, max(sale_date) from xyz_table where report_date = 20160718 group by transaction, sales; 

Dies ist das Ergebnis ist, dass ich bekommen: Dies ist die Beispieldaten ist:

|transaction  |  sales| sale_date| report_date| 
|1397115220084030| 0.000144| 20160714|20160718| 
|13971230534538500| 0  | 20160716|20160718|  
|13973937437448300| 0.000001| 20160716|20160718|  
|13976744119997000| 0.008563| 20160714|20160718|  
|13976744119997000| 0.002392| 20160715|20160718| 

Was ich einzigartige Geschäfte mit dem neuesten Erstverkaufstag wollte, war: Diese ist die erforderlichen Daten ein:

|transaction  |  sales| sale_date| report_date| 
|1397115220084030| 0.000144| 20160714|20160718| 
|13971230534538500| 0  | 20160716|20160718|  
|13973937437448300| 0.000001| 20160716|20160718|  
|13976744119997000| 0.002392| 20160715|20160718| 

Ich habe versucht, max Umsatz zu tun, aber das noch nicht das richtige Ergebnis nicht geben:

select transaction, Max(sales), max(sale_date) from xyz_table where report_date = 20160718 group by transaction; 

Wrong Ergebnis: Dies ist die erforderlichen Daten ein:

|transaction  |  sales| sale_date| report_date| 
|1397115220084030| 0.000144| 20160714|20160718| 
|13971230534538500| 0  | 20160716|20160718|  
|13973937437448300| 0.000001| 20160716|20160718|  
|13976744119997000| 0.008563| 20160715|20160718| 

Bitte kann mir jemand helfen.

Dank

+0

Sie sollten nach sale_date statt Transaktion gruppieren. Die Gruppierung nach Transaktion führt zu allen Zeilen, da die Transaktionsnummern alle eindeutig sind. Gruppierung nach Verkaufsdatum gibt nur eine Zeile für ein bestimmtes Datum zurück. – trajchevska

+0

Verwenden Sie Hive oder MySQL? Diese sind sehr unterschiedlich. –

+0

Sorry, dass .. es ist eine Bienenstockabfrage. – user175084

Antwort

1

In Hive, würden Sie Fensterfunktionen verwenden:

select t.* 
from (select t.*, 
      row_number() over (partition by transaction order by sale_date desc) as seqnum 
     from transactions t 
    ) t 
where seqnum = 1; 

Die MySQL-Abfrage würde ganz anders sein, weil es nicht diese ANSI-Standard-Funktionalität unterstützt.

Verwandte Themen