Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
SELECT Top, SELECT Max() oder was dazwischen
Gehe zu Seite 1, 2  Weiter
zurück: Update zwei Spalten in TabelleA aus TabelleB weiter: Summe Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Tina81
Noob


Verfasst am:
17. Dez 2009, 20:09
Rufname: Tina
Wohnort: Sachsen

SELECT Top, SELECT Max() oder was dazwischen - SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Leute,

ich hab eine Datenbank zusammengebastelt und folgende Tabellen:

tbl_Messstellen:
ID (PS)
Messstelle
Einbauort
etc

tbl_Pruefungen:
Pruef_ID (PS)
Mess_ID (FS)
Pruefdatum
Pruefer
Bemerkung
etc

Die Tabellen sind 1:n verknüpft.
Nun hätte ich ganz gerne eine Übersicht, welche Messstelle wann zuletzt geprüft wurde, komme aber nicht so wirklich zum Ziel.
Mit SELECT Max(Pruefdatum) ... bekomme ich trotzdem mehrere Zeilen pro Messstelle, sobald ich zum Datum die restlichen Felder der Tabelle tbl_Pruefungen hinzunehme.
Mit SELECT TOP 1 bekomme ich wirklich nur die allerletzte Prüfung angezeigt, unabhängig von der Messstelle.

Für einen SQL-Spezi ist das wahrscheinlich kein Problem, aber ich kriegs einfach nicht hin.

Bin für jede Hilfe dankbar.

Gruß, Tina

_________________
Gruß, Tina. Smile
KlausMz
Moderator Access


Verfasst am:
17. Dez 2009, 20:32
Rufname:
Wohnort: Irgendwo in der Pfalz


AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo,
versuche es mal so:
Code:
SELECT     Messstelle, Max(Prüfdatum) AS MaxvonPrüfdatum
FROM       tbl_Messstellen
INNER JOIN tbl_Pruefungen ON tbl_Messstellen.ID = tbl_Pruefungen.Mess_ID
GROUP BY   Messstelle;

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Tina81
Noob


Verfasst am:
17. Dez 2009, 20:56
Rufname: Tina
Wohnort: Sachsen

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Klaus,

mit dem Prüfdatum solo klappt das.
Nur sobald sich das Prüfergebnis oder die Bemerkung in der Prüftabelle unterscheidet, wird mir mit dieser Abfrage auch wieder für jedes Prüfung ein simpler Inner-Join erzeugt, also wieder pro Messstelle mehrere Zeilen.

_________________
Gruß, Tina. Smile
KlausMz
Moderator Access


Verfasst am:
17. Dez 2009, 21:05
Rufname:
Wohnort: Irgendwo in der Pfalz

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo,
das ist auch logisch. Es entstehen ja weitere Gruppierungsebenen.
Das hat mit dem Inner-Join nichts zu tun, bzw. spielt keine Rolle.

Wo willst Du denn diesen Wert anzeigen in einem Formular?

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Tina81
Noob


Verfasst am:
17. Dez 2009, 21:11
Rufname: Tina
Wohnort: Sachsen


AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Klaus,

ja, mir ist ja auch logisch, ich weiss nur nicht, wie ich das umgehen kann.

Ja, ich hätte ganz gerne ein Übersichtsformular, dass mir anzeigt, welche Messstellen als nächstes überprüft werden müssen. Die müssen seit neuestem jährlich geprüft werden, so dass ich mir eine Art To-Do-Liste erzeugen muss.

_________________
Gruß, Tina. Smile
KlausMz
Moderator Access


Verfasst am:
17. Dez 2009, 21:15
Rufname:
Wohnort: Irgendwo in der Pfalz

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo,
Zitat:
Ja, ich hätte ganz gerne ein Übersichtsformular, dass mir anzeigt, welche Messstellen als nächstes überprüft werden müssen.
Aber dann reicht doch diese Abfrage. Du kriegst die Messtelle mit dem höchsten Datum, mehr brauchst Du doch nicht.
Ist die mit dem höchsten Prüfdatum wirklich die Messstelle die als nächstes geprüft werden muss? Ist es nicht das älteste Prüfdatum?

_________________
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Tina81
Noob


Verfasst am:
17. Dez 2009, 21:25
Rufname: Tina
Wohnort: Sachsen

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Klaus,

ja gut, mein Chef hätte ganz gerne noch im Übersichtsformular die Bemerkung, wie die letzte Prüfung verlaufen ist.
Für mich reicht das so, wies ist, aber das ist nicht meine Entscheidung.

Zu der zweiten Frage:
Nein, natürlich nicht. Ich rechne mir dann in einer nachfolgenden Abfrage den messstellenabhängigen Prüfintervall auf das letzte Datum auf, und erzeuge mir dann meine To-Do-Liste, wann was zu machen ist.
Dieser Syntax ist aber nicht das Problem, da hab ich mit der Suchfunktion schon alles gefunden.

Ich hab mir grad überlegt, ich könnt auch in der Prüftabelle das Datum als Primärschlüssel festlegen, da die Wahrscheinlichkeit, dass eine Prüfung von verschiedenen Leuten zu einer Messstelle am selben Tag stattfindet, gegen Null geht.

So könnte ich mit einer nachfolgenden Abfrage doch noch Glück haben.

_________________
Gruß, Tina. Smile
MissPh!
Office-VBA-Programmiererin


Verfasst am:
17. Dez 2009, 21:28
Rufname:
Wohnort: NRW

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Tina,
Zitat:
ich könnt auch in der Prüftabelle das Datum als Primärschlüssel festlegen

das halte ich für keine gute Idee.

Folgende Abfrage funktioniert, vielleicht ein Ansatz für Verbesserungsvorschläge...
Code:
SELECT M.*, P.pdatum
FROM tbl_messstellen AS M INNER JOIN [Select tmp.Mess_ID, Max(tmp.Pruefdatum) as pdatum From tbl_Pruefungen as tmp group By tmp.mess_ID]. AS P ON M.ID = P.Mess_ID;

_________________
Gruß MissPh!
Tina81
Noob


Verfasst am:
17. Dez 2009, 21:46
Rufname: Tina
Wohnort: Sachsen

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo MissPh,

ja, so funktioniert das ja, aber genauso wie die Abfrage von Klaus.
Sobald ich eine weitere Spalte der Prüftabelle mit reinnehme, bekomme ich wieder pro Prüfung eine Zeile.

Kann ich das irgendwie mit "DISTINCT" ausschliessen oder hab ich grade einen Denkfehler?

_________________
Gruß, Tina. Smile
MissPh!
Office-VBA-Programmiererin


Verfasst am:
17. Dez 2009, 22:33
Rufname:
Wohnort: NRW

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Zitat:
so funktioniert das ja, aber genauso wie die Abfrage von Klaus.
upps, da habe ich wohl nicht richtig hingeschaut! Embarassed

Dies ist ein Problem an dem man sich immer wieder (aufs Neue) die Zähne ausbeißt, es wird Zeit die Lösung mal irgendwo leicht auffindbar festzuhalten.

Der einzige Weg den ich mir vorstellen kann, geht über die Pruef_ID des jeweiligen Datensatzes mit dem höchsten Prüfdatum. Bei chronolischer Datenerfassung könnte folgendes funktionieren:
Code:
SELECT   Mess_ID, Max(Pruef_ID), Max(PruefDatum)
FROM     tbl_Pruefungen
GROUP BY Mess_ID
damit könnte man die zugehörige Messstelle ausfindig machen.
Andernfalls braucht man wohl eine etwas aufwändigere Suche:
Code:
SELECT  Pruef_ID
FROM    tbl_Pruefungen AS P
        INNER JOIN (SELECT   mess_id, Max(Pruefdatum) AS pDatum
                    FROM     tbl_Pruefungen
                    GROUP BY Mess_Id) AS J
        ON  P.Mess_ID = J.Mess_ID
        AND P.Pruefdatum = J.pDatum
Kann aber auch sein, dass ich das viel zu kompliziert angehe... Wink
_________________
Gruß MissPh!
Gast



Verfasst am:
17. Dez 2009, 23:46
Rufname:

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Etwa so?
Code:
SELECT   M.Messstelle, P.Pruefdatum
FROM     tbl_Messstellen AS M
         INNER JOIN (SELECT P2.Mess_ID, P2.Pruefdatum
                     FROM   tbl_Pruefungen AS P2
                            INNER JOIN (SELECT   Mess_ID, Max(Pruefdatum) AS MaxDatum
                                        FROM     tbl_Pruefungen
                                        GROUP BY Mess_ID) AS X
                             ON  (P2.Mess_ID = X.Mess_ID)
                             AND (P2.Pruefdatum = X.MaxDatum) AS P
         ON M.ID = P Mess_ID
ORDER BY 2
MissPh!
Office-VBA-Programmiererin


Verfasst am:
17. Dez 2009, 23:57
Rufname:
Wohnort: NRW

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

[OT]
Werter namenloser unbekannter Gast:

Ich habe Verständnis dafür, wenn sich hier unregistrierte Gäste Rat holen wollen,
nicht aber, wenn sich hier anonyme Gäste als Ratgeber betätigen.

Begründung:
Es gibt keine Möglichkeit, Gäste über die Suchfunktion zu finden, das Wiederauffinden
von "irgendwann von irgendwem" erstellten Beiträgen wird dadurch erschwert.

Bedenke bitte, dass du mit deinem Verhalten nicht dem Forum schadest, sondern den
Nutzern, das kann ja wohl nicht deine Absicht sein!
[/OT]

_________________
Gruß MissPh!
Tina81
Noob


Verfasst am:
18. Dez 2009, 19:33
Rufname: Tina
Wohnort: Sachsen

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Gast,

ich habs mal probiert und bekomme immer noch einen "Syntax-Fehler in FROM-Klausel).
Das fehlende AS und den Punkt hab ich schon gefunden, aber nach zehnmaligen Lesen hab ich den letzten Fehler noch nicht gefunden:
Code:
SELECT   M.Messstelle, P.Pruefdatum
FROM     tbl_Messstellen AS M
         INNER JOIN (SELECT P2.Mess_ID, P2.Pruefdatum
                     FROM   tbl_Pruefungen AS P2
                            INNER JOIN (SELECT   Mess_ID, Max(Pruefdatum) AS MaxDatum
                                        FROM     tbl_Pruefungen
                                        GROUP BY Mess_ID) AS X
                            ON  (P2.Mess_ID = X.Mess_ID)
                            AND (P2.Pruefdatum = X.MaxDatum) AS P
         ON M.ID = P.Mess_ID
ORDER BY 2

_________________
Gruß, Tina. Smile
Gast



Verfasst am:
18. Dez 2009, 20:10
Rufname:

AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Sorry, da fehlte eine schließende Klammer nach dem P2.Pruefdatum = X.MaxDatum. Man sollte halt den Text etwas formatieren, insbesondere wenn man keine Testdaten und getestete Teilabfragen verwendet, sondern die Anweisung mal so hinschreibt. Formatiert wird es etwas übersichtlicher:
Code:
SELECT   M.Messstelle, P.Pruefdatum
FROM     tbl_Messstellen AS M
         INNER JOIN (SELECT P2.Mess_ID, P2.Pruefdatum
                     FROM   tbl_Pruefungen AS P2
                            INNER JOIN (SELECT   Mess_ID, Max(Pruefdatum) AS MaxDatum
                                        FROM     tbl_Pruefungen
                                        GROUP BY Mess_ID) AS X
                            ON  (P2.Mess_ID = X.Mess_ID)
                            AND (P2.Pruefdatum = X.MaxDatum)) AS P
         ON M.ID = P.Mess_ID
ORDER BY 2
Das AS ist generell verzichtbar (ausgenommen beim Feldbezeichner bei MaxDatum). Formatierer und Assistenten fügen es aber gerne hinzu.
Aufpassen musst du sehr, dass dir nicht der Abfrageeditor die Anweisung verfremdet bis unbrauchbar macht (Öffnen der Abfrage nur in SQL-Ansicht, nicht mehr in Entwurfsansicht). Bei einem JOIN mit einer Unterabfrage wie hier angewendet kannst du einen Bug "wunderbar" reproduzieren.
Tina81
Noob


Verfasst am:
18. Dez 2009, 20:20
Rufname: Tina
Wohnort: Sachsen


AW: SELECT Top, SELECT Max() oder was dazwischen - AW: SELECT Top, SELECT Max() oder was dazwischen

Nach oben
       Version: Office 2003

Hallo Gast,

danke, funktioniert soweit.
Und dank der Formatierung kann ich Noob sogar nachvollziehen, wie das passt.

Nur wenn ich eine Prüfbemerkung noch mit reinnehmen will, um anzuzeigen, wie der aktuelle Stand ist, geht es nicht mehr.

Aber egal, ich nehm jetzt nicht nur das Datum, sondern auch die Uhrzeit mit rein, denn es ist so gut wie ausgeschlossen, dass in der selben Sekunde mehrere Prüfungen entstehen. Die DB befummeln eh nur drei Leute.

_________________
Gruß, Tina. Smile


Zuletzt bearbeitet von Tina81 am 18. Dez 2009, 20:47, insgesamt einmal bearbeitet
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Gehe zu Seite 1, 2  Weiter
Diese Seite Freunden empfehlen

Seite 1 von 2
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Tabellen & Abfragen: Abfrage: INSERT INTO mit festem Wert und SELECT 1 DrPepper 2327 27. März 2008, 15:59
Willi Wipp Abfrage: INSERT INTO mit festem Wert und SELECT
Keine neuen Beiträge Access Tabellen & Abfragen: Min und Max mit negativen Zahlen 4 tbarteck 599 22. Feb 2008, 11:52
tbarteck Min und Max mit negativen Zahlen
Keine neuen Beiträge Access Tabellen & Abfragen: TOP und UNION 4 xruxl 480 23. Nov 2007, 18:48
xruxl TOP und UNION
Keine neuen Beiträge Access Tabellen & Abfragen: TOP 2 in Unter-Select von einer UNION 1 daWonderer 1920 15. Sep 2007, 12:36
JörgG TOP 2 in Unter-Select von einer UNION
Keine neuen Beiträge Access Tabellen & Abfragen: TOP 5 Abfrage einstellen 2 HarryHirsch 1497 21. Aug 2007, 17:49
HarryHirsch TOP 5 Abfrage einstellen
Keine neuen Beiträge Access Tabellen & Abfragen: MEMOFELD erzeugen in Tabellenerstellungsabfrage SELECT INTO 1 aeschen 1807 18. Aug 2007, 17:44
steffen0815 MEMOFELD erzeugen in Tabellenerstellungsabfrage SELECT INTO
Keine neuen Beiträge Access Tabellen & Abfragen: MAX Wert einer Zeile anzeigen 11 Gast 2020 14. Mai 2007, 09:35
Gast MAX Wert einer Zeile anzeigen
Keine neuen Beiträge Access Tabellen & Abfragen: Begrenzung max. Anzahl an Tabellen 1 Jadexy 909 05. Feb 2007, 19:56
rita2008 Begrenzung max. Anzahl an Tabellen
Keine neuen Beiträge Access Tabellen & Abfragen: Top 100 bzw. Top 80 aus einer Abfrage auswählen, wie? 4 Markus_l 1615 20. Jan 2007, 14:53
Willi Wipp Top 100 bzw. Top 80 aus einer Abfrage auswählen, wie?
Keine neuen Beiträge Access Tabellen & Abfragen: date in string konvertieren innerhalb einer select Abfrage 4 samba 5443 23. Nov 2006, 18:50
samba date in string konvertieren innerhalb einer select Abfrage
Keine neuen Beiträge Access Tabellen & Abfragen: "Select TOP 1" (Ermittlung gült. Preis bei Preishi 1 Benjamin1989 4329 07. Nov 2006, 08:18
jens05 "Select TOP 1" (Ermittlung gült. Preis bei Preishi
Keine neuen Beiträge Access Tabellen & Abfragen: auswertung eines wertes der am dichtesten am max pro ds ist 8 RRobert 790 04. Sep 2006, 11:45
RRobert auswertung eines wertes der am dichtesten am max pro ds ist
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Word VBA