Oracle: Maximaler Wert einer Gruppe erhalten?

8

Bei einer solchen Tabelle werden bei der Abfrage die neuesten Kalibrierungsinformationen für jeden Monitor angezeigt. Mit anderen Worten, ich möchte den maximalen Datumswert für jeden der Monitore finden. Oracle-spezifische Funktionalität ist für meine Anwendung in Ordnung.

%Vor%

Die Ergebnisse für dieses Beispiel würden wie folgt aussehen:

%Vor%     
Mark Harrison 10.02.2012, 00:14
quelle

4 Antworten

18

Ich würde eher analytische Funktionen verwenden

%Vor%

Sie könnten auch korrelierte Unterabfragen verwenden, obwohl dies weniger effizient ist

%Vor%     
Justin Cave 10.02.2012, 00:18
quelle
10

Meine persönliche Vorliebe ist dies:

%Vor%

Eine Variante wäre, die FIRST_VALUE -Syntax auch für latest_calibration_date zu verwenden. So oder so funktioniert.

    
Jeffrey Kemp 10.02.2012 02:34
quelle
2

Die Fensterfunktionen solution sollte am effizientesten sein und nur einen Tabellen- oder Indexscan ergeben. Der, den ich hier poste, gewinnt einige Punkte, weil er intuitiv und leicht zu verstehen ist. Ich testete auf dem SQL-Server und es führte 2. zu Fensterfunktionen, resultierend in zwei Index Scans.

%Vor%

Und nur zum Teufel, hier ist eine andere in der gleichen Richtung, aber weniger Leistung (63% Kosten vs 37%) als die andere (wieder in SQL-Server). Dieser verwendet einen Linksouter-Join im Ausführungsplan, in dem als erster ein Anti-Semi-Merge-Join verwendet wird:

%Vor%     
J Cooper 10.02.2012 01:50
quelle
1
%Vor%     
Sergey Benner 10.02.2012 00:17
quelle

Tags und Links