Ich habe zwei Tabellen:.. TableA (ID [int, pk], Name [string])
und TableB(ID [int, pk], TableA_ID [int, fk], Name [string], DateStamp [datetime (dd/mm/yyyy hh:MM:ss)])
Es gibt eine Beziehung zwischen TableA und TableBist dies ein Kandidat für eine sql groupby Abfrage?
eine innere Verknüpfung auf den beiden Tabellen geben mir die folgenden Ergebnisse:
TableA.ID, TableA.Name, TableB.Name, TableB.DateStamp 1, 'File A', 'Version 1', 01/01/2009 15:00:00 1, 'File A', 'Version 2', 05/01/2009 08:15:00 1, 'File A', 'Version 3', 06/01/2009 19:33:00 2, 'File B', 'Version 1', 03/01/2009 09:10:00 2, 'File B', 'Version 2', 20/01/2009 20:00:00 3, 'File C', 'Version 1', 01/01/2009 17:00:00
Was ich wirklich will, ist die folgende (jede Zeile von TableA und die letzten passenden Zeile von TableB):
TableA.ID, TableA.Name, TableB.Name, TableB.DateStamp 1, 'File A', 'Version 3', 06/01/2009 19:33:00 2, 'File B', 'Version 2', 20/01/2009 20:00:00 3, 'File C', 'Version 1', 01/01/2009 17:00:00
Dies ist die Abfrage, die ich verwende, dies zu erreichen:
SELECT ta.ID, ta.Name, tb.Name, tb.DateStamp
FROM TableA ta INNER JOIN TableB tb ON ta.ID = tb.TableA_ID
WHERE tb.ID IN (
SELECT TOP 1 tb2.ID
FROM TableB tb2
WHERE tb2.TableA_ID = ta.ID
ORDER BY tb2.DateStamp DESC)
Das aber Gefühl ist mein gut funktioniert, dass ich tue dies nicht in dem „besten Weg“. Es sieht so aus, als wäre es ein Kandidat für eine Sammelanfrage (d. H. Groupby), aber ich hatte damit kein Glück. Am Ende musste ich immer eine Unterabfrage verwenden, um die Zeile zu erhalten, nach der ich in TableB gesucht habe.
Jede Hilfe sehr geschätzt.
ich auf der obersten Ebene Gruppe in dieser Situation durch den Einsatz war auf der Suche, und kam zu ähnlichen Schlussfolgerungen wie Ihre. – kristof
Ich würde vorschlagen, TableB.TableB_ID in der ersten Abfrage zu verwenden, wenn möglich (d. H. Wenn es die gleiche Reihenfolge wie DateStamp hat), da der Ganzzahlvergleich immer schneller ist als der Datumsvergleich. –
Ja, aber ich kann nicht stillschweigend eine TableB.TableB_ID implizieren, die streng monoton zunimmt. – Tomalak