Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage mit verschiedenen Datensätzen, jeweils mit dem neusten Datum

Begonnen von Balaezth, Februar 13, 2018, 08:41:44

⏪ vorheriges - nächstes ⏩

Balaezth

Hallo,

ich bin neu hier und vielleicht könnt ihr mir helfen.
Es geht um folgendes:

Ich möchte eine Abfrage erschaffen in der mir die Datensätze mit dem jeweils höchsten Datum angezeigt werden.

Mal zum Aufbau der Tabelle(n):
Tabelle 1: tblGeräte_Basisdaten
-ID <-Autowert
-Prüfnummer <-Zahl
-Name <-Text
-Typ <-Text

Bsp. 1| 1| Verlängerungsleitung| weiß

Tabelle 2: tblGeräte_Messdaten
-ID <-Autowert
-Prüfnummer <-Zahl
-Prüfdatum <-Datum
-Messwert1 <-Zahl
-Messwert2 <-Zahl
-Messwert3 <-Zahl

bsp. 1| 1| 24.12.2016| 100mA| etc.

Jetzt soll folgendes Passieren, in die Tabelle Messdaten sollen alle Messwerte von allen Geräten über eine, sagen wir mal 5 Jahre, (jedes Jahr eine Messung).

Aber in dem Formular, würde ich gerne nur die mit dem neusten Datum anzeigen, später in einem Detailbericht dann ein Gerät mit den jeweiligen Datensätzen aus dem der Messwerttabelle.

So nun habe ich eine Abfrage erstellt die mir aus der Messwerttabelle den Datensatz mit dem höchsten Datum anzeigt aber eben wirklich nur diesen einen.
Wenn ich jetzt z.B. 5 Prüflinge habe, habe ich aber 5x ein höchstes Datum (was natürlich nicht immer gleich ist). Und ich möchte das mir diese 5 Datensätze angezeigt werden.

Bsp:
Prüfling 1 | 29.8.2014
Prüfling 2 | 27.9.2014
Prüfling 3 | 8.4.2015
etc.

Meine Abfrage sieht zur Zeit folgendermaßen aus:
SELECT tblGeräte_Basisdaten.Prüfnummer, tblGeräte_Messdaten.Prüfdatum, tblGeräte_Messdaten.Messwert1, tblGeräte_Messdaten.Messwert2, tblGeräte_Messdaten.Messwert3, tblGeräte_Basisdaten.Name, tblGeräte_Basisdaten.Typ
FROM tblGeräte_Basisdaten LEFT JOIN tblGeräte_Messdaten ON tblGeräte_Basisdaten.Prüfnummer = tblGeräte_Messdaten.Prüfnummer
GROUP BY tblGeräte_Basisdaten.Prüfnummer, tblGeräte_Messdaten.Prüfdatum, tblGeräte_Messdaten.Messwert1, tblGeräte_Messdaten.Messwert2, tblGeräte_Messdaten.Messwert3, tblGeräte_Basisdaten.Name, tblGeräte_Basisdaten.Typ
HAVING (((tblGeräte_Messdaten.Prüfdatum)=(SELECT Max([tblGeräte_Messdaten].[Prüfdatum]) FROM [tblGeräte_Messdaten])));


Ich hoffe ihr versteht was ich meine und vielleicht könnt ihr mir helfen.

Grüße
Balaezth

DF6GL

Hallo,

etwa so:


SELECT tblGeräte_Basisdaten.Prüfnummer, tblGeräte_Messdaten.Prüfdatum, tblGeräte_Messdaten.Messwert1, tblGeräte_Messdaten.Messwert2, tblGeräte_Messdaten.Messwert3, tblGeräte_Basisdaten.Name, tblGeräte_Basisdaten.Typ
FROM tblGeräte_Basisdaten LEFT JOIN tblGeräte_Messdaten ON tblGeräte_Basisdaten.Prüfnummer = tblGeräte_Messdaten.Prüfnummer
Where tblGeräte_Messdaten.Prüfdatum= (
                                      SELECT Max(T.[Prüfdatum]) FROM [tblGeräte_Messdaten] as T 
                                      Where T.Prüfnummer = tblGeräte_Basisdaten.Prüfnummer
                                      )



Lachtaube

SELECT q.Prüfnummer,
       q.Prüfdatum,
       q.Messwert1,
       q.Messwert2,
       q.Messwert3,
       b.Name,
       b.Typ
FROM   tblGeräte_Basisdaten AS b
       LEFT JOIN ( SELECT m.Prüfnummer,
                          Max( m.Prüfdatum )   AS Prüfdatum,
                          First( m.Messwert1 ) AS Messwert1,
                          First( m.Messwert2 ) AS Messwert2,
                          First( m.Messwert3 ) AS Messwert3,
                   FROM   tblGeräte_Messdaten AS m
                   GROUP  BY d.Prüfnummer ) AS q
              ON b.Prüfnummer = q.Prüfnummer;

PS: Die Messwert-Tabelle ist suboptimal organisiert und sollte aufgeteilt werden, so dass zu jedem Prüfdatum die Messdaten in Detaildatensätzen in einer separaten Tabelle stehen.

PPS: Auf Umlaute und andere Sonderzeichen sollte man in Objektnamen verzichten. Name ist auch ein schlecht gewählter Feldname, weil er mit der gleichnamigen Eigenschaft in Formularen und Berichten kollidiert.
Grüße von der (⌒▽⌒)

ebs17

Kernberechnung:
SELECT
   Prüfnummer,
   MAX(Prüfdatum) AS MaxDatum
FROM
   tblGeräte_Messdaten
GROUP BY
   Prüfnummer

Erweiterung, um alle Felder der Tabelle zu erhalten:
SELECT
   M.*
FROM
   (
      SELECT
         Prüfnummer,
         MAX(Prüfdatum) AS MaxDatum
      FROM
         tblGeräte_Messdaten
      GROUP BY
         Prüfnummer
   ) AS K
      INNER JOIN tblGeräte_Messdaten AS M
      ON K.Prüfnummer = M.Prüfnummer
         AND
      K.MaxDatum = M.Prüfdatum

Diese Abfrage kannst Du nun statt der ursprünglichen Tabelle tblGeräte_Messdaten mit der Basistabelle verknüpfen.
Mit freundlichem Glück Auf!

Eberhard

Balaezth

Hallo,
vielen dank für die schnellen Antworten.

@DF6GL
Danke für deinen Vorschlag.

@Lachtaube
Ja du hast recht, ich schau das ich Namen von Tabellen und Spalten ordentlicher deklariere. Danke.

@ebs17
Vielen Dank, das ist wohl genau das was ich gesucht habe.

Grüße
Balaezth