2012-03-26 16 views
2

Ich versuche den letzten Datensatz einer Gruppe zu finden, nachdem ich einen internen Join durchgeführt habe.Den neuesten Datensatz einer Gruppe abrufen

sagen, dass ich die folgenden beiden Tabellen:

dateCreated | id 
2011-12-27 | 1 
2011-12-15 | 2 
2011-12-17 | 6 
2011-12-26 | 15 
2011-12-15 | 18 
2011-12-07 | 22 
2011-12-09 | 23 
2011-12-27 | 24 


    code  | id 
    EFG  | 1 
    ABC  | 2 
    BCD  | 6 
    BCD  | 15 
    ABC  | 18 
    BCD  | 22 
    EFG  | 23 
    EFG  | 24 

Ich möchte das nur angezeigt kürzlich der Gruppierungen:

So wäre das Ergebnis:

dateCreated | code 
2011-12-27 | EFG 
2011-12-15 | ABC 
2011-12-26 | BCD 

Ich weiß, Dies kann mit den Funktionen max und group by erreicht werden, aber ich kann nicht das gewünschte Ergebnis erhalten.

Antwort

3

Ich denke, das sollte man dort:

select max(a.dateCreated) as dateCreated 
    , b.code 
from table1 a 
    join table2 b on a.id = b.id 
group by b.code 
+0

Ja, das ist alles, was ich brauchte, Cheers, ich werde es als richtig markieren, wenn es mich lässt – user1186144

0

Angenommen, Ihre Tabellen genannt a und b, versuchen Sie dies:

select max(a.dateCreated) as dateCreated, b.code 
from a join b on a.id = b.id 
group by b.code 
+0

Sql Fiddle [hier] (http://sqlfiddle.com/#!3/b9df9/1). –

0

Sie analytische Funktionen für diese verwenden können. Auf diese Weise entscheiden Sie sich nach wie vor nur ein Ergebnis für jeden Code, auch wenn sie zwei mit der gleichen letzten dateCreated (dies kann oder kann nicht sein, was Sie eigentlich als Folge wollen)

SELECT Code, dateCreated 
FROM ( SELECT T2.Code, T1.dateCreated, ROW_NUMBER() OVER(PARTITION BY T2.Code ORDER BY T1.dateCreated DESC) Corr 
     FROM Table1 T1 
     INNER JOIN Table2 T2 
     ON T1.id = T2.id) A 
WHERE Corr = 1 
Verwandte Themen