2017-05-29 2 views
0

Ich muss zwei maximale Daten aus zwei verschiedenen Spalten in derselben Tabelle zurückgeben. Ich möchte, dass das Ergebnis in derselben Zeile steht. Dies ist meine Tabellendaten:Maximale Daten berechnen

If i have this   
store item tran-code date 
1788 2004635 1  17.05.27 
1788 2004635 2  17.05.27 
1788 2004635 30  17.05.26 
1788 2004635 2  17.05.21 
1788 2004635 1  17.05.21 
1788 2004635 2  17.05.20 
1788 2004635 1  17.05.20 

und ich möchte diese ...

store item tran-code date 
1788 2004635 1  17.05.27 
1788 2004635 30  17.05.26 

aber wenn Sie mich diese zurückkehren bekommen konnte, wird es

store item  date_1 date_30 
1788 2004635 17.05.27 17.05.26 

wo Datum_1 perfekt ist das maximale Datum für den transkode = 1 und datum_30 ist das maximale Datum für den transkode = 30

+2

welche RDBMS und Version verwenden Sie? – Lamak

+0

mit SQL Developer –

+2

aber welche Datenbank-Engine verwenden Sie ?, Oracle, SQL Server, PostgreSQL, MySQL? – Lamak

Antwort

1

könnten Sie

select a.store, a.item, max(a.date) as date_1, t.date_30 
from my_table a 
inner join (
select store, item, max(date) as date_30 
from my_table a 
where a.trans-code = 30 
group by store, item 
) t on a.store = t.store and a.item = t.item 
group by a.store, a.item, t.date_30 
+0

Ich habe dies versucht und gibt Fehler ORA-00937: "keine Gruppenfunktion einer einzelnen Gruppe". Zeile 1 Spalte 8. weiß nicht, was ich falsch mache ... –

+0

fehlende Gruppe von auf Hauptauswahl .. Antwort aktualisiert .. – scaisEdge

+0

immer noch Fehler, ORA-00979: "kein GROUP BY Ausdruck" in Zeile 1 Spalte 52. Spalte 52 entspricht t.date_30 –

1

verwenden Wenn Sie nur 1 Satz sind die Auswahl, wenn speichern und Einzelteil, dann können Sie diese verwenden. Wenn Sie jedoch mehr Speicher und Element hinzufügen, verwenden Sie Join wie die @ saisEdge-Antwort.

select distinct store,item, 
(select max(date) from table1 where tran-code=1) as date_1 
,(select max(date) from table1 where tran-code=30) as date_30 
from table1; 
+0

i habe deine suggestion ausprobiert und fehler zurückgegeben: ORA-00923: 00923. 00000 - "FROM Schlüsselwort nicht gefunden, wo erwartet" –

+0

es gibt Fehler bei der ersten Auswahl Max (Datum) –

+0

Ich setze von Klausel nach wo, daher der Fehler. Aktualisiert. Jetzt prüfen – Utsav

1
SELECT STORE,item ,tran_code,date1 FROM (
SELECT a.*,Row_Number() OVER (PARTITION BY tran_code ORDER BY date1 DESC) rnk FROM tran a) 
WHERE tran_code IN (1,30) AND rnk=1 
; 
Verwandte Themen