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%Ich würde eher analytische Funktionen verwenden
%Vor%Sie könnten auch korrelierte Unterabfragen verwenden, obwohl dies weniger effizient ist
%Vor%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.
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%