Hallo zusammen,
nach längerer Zeit muss ich nun an einer älteren Datenbank die ich mit Access 2003 erstellt habe, eine Änderung machen.
Die Datenbank wird für einen Volkslauf verwendet und muss nun erweitert werden.
In einer Abfrage werden Mannschaft, Läufer und Zeit angezeigt, diese Abfrage dient als Basis.
Nun benötige ich eine Abfrage für nachstehenden Modus:
Die besten 3 Zeiten einer Mannschaft ergeben eine gemeinsame Mannschaftszeit. Weniger wie 3 Läufer einer Mannschaft nehmen bei der Auswertung nicht teil (Also: Best 3)
Ausgabe als Bericht einer Mannschaftswertung.
Mein Problem liegt nun darin, dass ich diese Abfrage nicht hinbekomme. Hat jemand eine gute Idee ?
Viele Grüße
Rainy
SELECT
Mannschaft,
Sum(Zeit) AS Zeitsumme
FROM
(
SELECT
A.Mannschaft,
A.Zeit
FROM
DeineAbfrage AS A
WHERE
A.ID IN
(
SELECT TOP 3
B.ID
FROM
DeineAbfrage AS B
WHERE
B.Mannschaft = A.Mannschaft
ORDER BY
B.Zeit
)
) AS X
GROUP BY
Mannschaft
MfGA
ebs
Hallo ebs,
erst einmal vielen Dank für den Tipp.
Ich habe die Abfrage bei mir eingeführt und die Werte von Deine Abfrage mit dem Abfragennamen ersetzt.
SELECT verein, Sum(Zeit) AS Zeitsumme
FROM [SELECT
A.Verein,
A.Zeit
FROM
BioTeam AS A
WHERE
A.ID IN
(
SELECT TOP 3
B.ID
FROM
BioTeam AS B
WHERE
B.verein = A.verein
ORDER BY
B.Zeit
)
]. AS X
GROUP BY verein;
Wenn ich nun die Abfrage starte erhalte ich ein Parameterwert-Feld für B.ID und A.ID. Was muss ich hier noch beachten und was hat A.ID und B.ID für eine Bedeutung ?
Danke im Voraus
Rainy
Ein identifier (ID) kennzeichnet durch einen eindeutigen Wert den jeweiligen Datensatz. Hast Du so etwas nicht, ist
a) der bisherige Aufbau schon Murks und
b) wird dann eine Abfrage gleich deutlich umfangreicher oder eventuell nicht mehr erstellbar.
MfGA
ebs
o.k. hab ich verstanden. Hatte bereits Identifikationsfeld angelegt. Nur nicht drangedacht dass ich das mitziehen muss.
Die Abfrage wird nun ausgeführt und berechnet die Gesamtzeit. Was allerdings nicht funktioniert ist das Kriterium, dass min. 3 Personen eine Mannschaft bilder müssen. Einzelläufer oder nur 2 Teilnehmer eines Vereins werden genauso in die Abfrage mit einbezogen.Kann man die Abfrage daraufhin erweitern dass nur Teilnehmer in der Liste auftauchen wo mindestens 3 Personen derselben Mannschaft gemeldet sind, oder muss ich diese Filterung bereits irgendwie im Vorfeld vornehmen?
Viele Grüße
Rainy
...
GROUP BY verein
HAVING Count(verein) > 2;Zitat... oder muss ich diese Filterung bereits irgendwie im Vorfeld vornehmen?
Diese Idee ist grundsätzlich hervorragend, weil Filtern weniger aufwändig ist als Joinen, Sortieren und Gruppieren/Aggregieren. Im konkreten Fall werden die Effekte bzgl. Performance aber nicht besonders sein, da zum Filtern nach Anzahlen auch eine Gruppierung nötig ist und zum anderen die Abfrage um einiges komplexer wird. Das wäre dann also ein Fall zum Ausprobieren, wenn man wegen wirklicher Performanceprobleme Varianten gegeneinander testen würde, um dann über Messungen zu ermitteln, was denn nun wirklich schneller ist.
MfGA
ebs
Hallo,
Abfrage funktioniert perfekt! Es sind jetzt nicht so viele Daten, dass man den Eindruck hätte es wäre zu langsam. Wer schonmal mit Domsumme zu tun hatte weiss was langsam bedeuten kann.
Diese Abfrage ist perfekt - nochmals vielen Dank
Mfg
Rainy