Moin!
gerade wenn man viel mit sql-anweisungen zu tun hat, ist ein schnelles lesen und verstehen der abfrage sehr wichtig.
Vielleicht liegt es daran, daß ich nicht viel mit SQL Abfragen zu tun habe. Meine Abfrage fand ich verständlicher. Das innere SELECT sucht mir alle Gruppen von "name" und "condition" raus und dazu das größte "inserted". zu diesen sucht mir dann das äußere die passenden Values hinzu.
Ich muß allerdings auch sagen, daß ich gerade heute mit so einem Fall zu tun hatte, wo mir auch das hier nicht weitergeholfen hat und ich nur mit der Hilfe eines Kollegen auf die dreistufig Verschachtelte Abfrage zustande bekommen habe.
vereinfachte Ausgangslage
Spalten Name, Vers, Variante, Tstamp
Zu jedem Namen gibt es mehrere Varianten. Jede Kombination davon kann in mehreren Versionen vorliegen. Jede Version wurde zu nahezu demselben Zeitpunkt eingetragen.
Ziel ist nun, die aktuellste Version zu finden, wobei die größe der Versionsnummer nicht maßgeblich ist, sondern der Timestamp
Beispiel:
Name Variante Vers Tstamp
A 1 1 20:00
A 2 1 20:01
A 1 2 21:00
A 2 2 21:01
A 1 3 19:00
A 2 3 19:01
B 1 1 10:00
B 2 1 10:01
B 1 2 11:00
B 2 2 11:01
B 1 3 12:00
B 2 3 12:01
Ergebnis sollte sein
Name Variante Vers Tstamp
A 1 2 21:00
A 2 2 21:01
B 1 3 12:00
B 2 3 12:01
Statement dazu
SELECT
Name,
Variante,
Vers,
Tstamp
FROM my_table t1
WHERE t1.Vers IN
(
SELECT t2.Vers
FROM my_table t2
WHERE t2.Name = t1.Name
AND t2.Tstamp IN
(
SELECT MAX(t3.Tstamp)
FROM my_table t3
WHERE t3.Name = t2.Name
)
)
Ob das auch kürzer geht? Ich bin mir aber relativ sicher: Mit GROUP BY käme ich hier nicht weiter.
Was sagen die 2 Koriphäen?
-- Skeeve