collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 45
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 4
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13856
  • stats Beiträge insgesamt: 64954
  • stats Themen insgesamt: 8760
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: Abfrage mit verschiedenen Datensätzen, jeweils mit dem neusten Datum  (Gelesen 71 mal)

Offline Balaezth

  • Newbie
  • Beiträge: 2
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
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23216
Re: Abfrage mit verschiedenen Datensätzen, jeweils mit dem neusten Datum
« Antwort #1 am: Februar 13, 2018, 09:22:13 »
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
                                      )


Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1066
Re: Abfrage mit verschiedenen Datensätzen, jeweils mit dem neusten Datum
« Antwort #2 am: Februar 13, 2018, 09:32:05 »
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 (⌒▽⌒)
 

Offline ebs17

  • Access-Meister
  • ***
  • Beiträge: 844
Re: Abfrage mit verschiedenen Datensätzen, jeweils mit dem neusten Datum
« Antwort #3 am: Februar 13, 2018, 09:36:33 »
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
 
Folgende Mitglieder bedankten sich: Balaezth

Offline Balaezth

  • Newbie
  • Beiträge: 2
Re: Abfrage mit verschiedenen Datensätzen, jeweils mit dem neusten Datum
« Antwort #4 am: Februar 13, 2018, 10:53:51 »
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