collapse

* Benutzer Info

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

* Wer ist Online

  • Punkt Gäste: 64
  • Punkt Versteckte: 1
  • Punkt Mitglieder: 5
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13804
  • stats Beiträge insgesamt: 63512
  • stats Themen insgesamt: 8606
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen  (Gelesen 101 mal)

Offline Grumpy

  • Newbie
  • Beiträge: 29
Ich habe ein Tabelle mit ID (dient als identifizierung mit anderen Tabellen) und 4 Spalten A - D in denen entweder ein Datum drin steht oder auch leer ist.
Jetzt möchte ich eine Abfrage (für einen Bericht) bei dem als Ausgabe für jeden Datensatz das jeweils jüngste Datum und der Spaltenname ausgegeben wird.
also z.B.
Id      Datum       Modul
3     22.10.2017   Modul A
8     12.07.2017   Modul D
99    22.12.1994  Modul C
......
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 854
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #1 am: November 30, 2017, 10:38:50 »
Die Ausgangslage ist ungünstig.  :( Du kannst eine Vereinigungsabfrage erstellen, in der Du jedem Datumswert mitteilst, von welcher ursprünglichen Spalte in der der Tabelle (nenne ich im weiteren einfach T) er stammt.

SELECT id, a AS Datum, "Modul A" AS Modul FROM T WHERE a Is Not Null
UNION ALL
SELECT id, b, "Modul B" FROM T WHERE b Is Not Null
UNION ALL
SELECT id, c, "Modul C" FROM T WHERE c Is Not Null
UNION ALL
SELECT id, d, "Modul B" FROM T WHERE d Is Not Null;
Spaltennamen in Abfragetext ggf. an Deine Gegegebenheiten im Text anpassen und den Code in die SQL-Ansicht einer neuen Abfrage kopieren und testen. Das war Schritt 1.

Diese Abfrage muss erneut abgefragt werden, um das höchste Datum je id zu erheischen. Dazu das Summensymbol (Sigma) im Band oben anklicken und id als auch Datum als Feld in die Abfrage aufnehmen. Bei id sollte unter Funktion Gruppierung und bei Datum die Funktion Maximum stehen.

Schritt 3: Nimm Abfrage 1 und Abfrage 2 in eine neue Abfrage auf. Ziehe Verknüpfungslinien jeweils zwischen der id und zwischen dem Datum auf. Danach wählst Du alle Felder aus der 1. Abfrage aus und solltest das Wunschresultat vorliegen haben.

Bei größerem Datenbestand ist mit Wartezeiten bei der Ausführung zu rechnen. Sollte das der Fall sein, solltest Du bestrebt sein, die Ausgangstabelle so zu organisieren, wie es die Abfrage 1 ausgibt. Dabei könnte man noch statt dem Text im Feld Modul einen Fremdschlüssel von einer Tabelle mit zwei Feldern einsetzen, die die vier Module in vier Datensätzen beschreibt.
Grüße von der (⌒▽⌒)
 

Offline Grumpy

  • Newbie
  • Beiträge: 29
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #2 am: November 30, 2017, 13:44:31 »
ist ja fast wie eine Doktorarbeit....
Hab soweit die Abfragen erstellt aber....
 es wird zwei mal nach a b c d gefragt
geb ich da nichts ein...ist die Ausgabe ohne ergebniss
geb ich irgendwas ein(egal ob Zahl oder Datum) ....gibt es für jede ID nicht nur das jüngstes Modul sondern alle
bsp:
ID         Datum            Modul
7          10.10.2017      Modul A
7          14.12.2017     Modul B
66         01.01.2015     Modul A
66         05.12.2018     Modul D

schön wäre aber je ID eine Zeile mit dem Datum und dem jüngsten Modul

Die Tabelle heist tab_Einsatzhelfer
mit den Spalten
Modul_A, Modul_B.....Modul_C
und als Wert wird das Datum eingetragen
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23091
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #3 am: November 30, 2017, 13:59:53 »
Hallo,

aus DbWiki.net  und etwas modifiziert:

Public Function fktMaxDat(ParamArray P())
' Maximum
Dim V, I As Long, Spalte As Long
  V = 0
  For I = LBound(P) To UBound(P)
    If (P(I) > V) Then
       V = CDate(P(I))
       Spalte = I + 1
    End If
  Next I
  fktMaxDat = Format(V, "dd.mm.yyyy") & ", " & Choose(Spalte, "Modul A", "Modul B", "Modul C", "Modul D")
End Function


Aufruf:


Select * , fktMaxDat ([Modul_A],[Modul_B],[Modul_C],[Modul_D])  from tab_Einsatzhelfer

Offline Grumpy

  • Newbie
  • Beiträge: 29
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #4 am: November 30, 2017, 14:43:54 »
Bei dem Aufruf meckert er aber wegen dem *
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 854
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #5 am: November 30, 2017, 14:51:35 »
Ich habe Dir ein Beispiel hier eingestellt.
Grüße von der (⌒▽⌒)
 

Offline MzKlMu

  • Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 6940
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #6 am: November 30, 2017, 17:36:11 »
Hallo,
der Einwand von Lachtaube scheint mir untergegangen zu sein.
Zitat von: Lachtaube
Die Ausgangslage ist ungünstig. 
Mit einem normalisierten Aufbau der Tabelle wäre der ganze Aufwand gar nicht nötig.
Die Moduldatumswerte als je ein Datensatz mit einem Kennzeichen für das Modul in einer extra Tabelle würde die Aufgabe zu einem Kinderspiel machen.

Wollte ich nur noch erwähnt haben.
Gruß
Klaus
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1600
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #7 am: November 30, 2017, 18:34:54 »
Hallo,
Zitat
ist ja fast wie eine Doktorarbeit....
Liegt wohl am angedeuteten suboptimalen Datenmodell.
Mit einer tab_Module und einer Zwischentabelle tab_Helfer_Module
erhält man aus den Beispieldaten mit dieser Abfrage
SELECT
    Q.HelferID_F,
    Q.ModDatum,
    M.ModulName
FROM tab_Module AS M
     INNER Join
          (
            SELECT
                HM.HelferID_F,
                HM.ModulID_F,
                HM.Moddatum
            FROM tab_Helfer_Module AS HM
                INNER Join
                        (
                          SELECT HMU.HelferID_F,
                                 Max(HMU.Moddatum) As ModulDatum
                          FROM tab_Helfer_Module AS HMU
                          GROUP BY HMU.HelferID_F
                         ) AS M
                ON (HM.Moddatum = M.ModulDatum) AND (HM.HelferID_F = M.HelferID_F)
          ) AS Q
    ON M.ModulID = Q.ModulID_F
das gewünschte Ergebnis
7   14.12.2017   Modul B
66   05.12.2018   Modul D

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Online DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23091
Re: aus 4 Spalten in Tabelle das jeweils jüngste Datum aussuchen
« Antwort #8 am: November 30, 2017, 19:12:48 »
Hallo,


bei der VBA-Lösung:

Zitat
Bei dem Aufruf meckert er aber wegen dem *

Das ist ein SQL-String, sprich Abfrage und kein VBA-Code....