1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Access 2003 - Differenzberechnung von Datumswerten

Discussion in 'Office-Programme' started by kli02, Feb 1, 2007.

Thread Status:
Not open for further replies.
  1. kli02

    kli02 ROM

    Hallo,

    Habe aus einer externen Datenbank eine Abfrage aller Namen >1mit 3Spalten "Namen" ;"aufnahme Datum";"entlassungs Datum".
    Der Name kommt mehrfach vor,nun möchte ich die Differenz zwischen Entlassungs datum aus z.B Zeile1 und Aufnahme Datum Zeile 2 berechnen.
    Wie geht das.

    danke im vorraus
     
  2. Hascheff

    Hascheff Moderator

    Hallo kli02,
    willkommen im Forum.

    Vorweg: Es gibt hier ein Board Office-Programme, dort hättest du den Thread erstellen sollen.
    Hiermit bitte ich einen Moderator, den Thread zu verschieben.

    Zu Aufgabenpräzisierung:
    Ich gehe davon aus, dass eine Person in mehreren Zeilen vertreten ist und nicht etwa mehrere Personen gleichen Namens.
    Da es vorkommen kann, dass verschiedene Personen den gleichen Namen tragen, wäre zu empfehlen, ID-Nummern statt Namen zu verwenden. Aber bei externen Datenquellen kann man das vielleicht nicht beeinflussen.
    Mit externen Datenquellen habe ich auch keine Erfahrung, ich gehe davon aus, dass das keine Rolle spielt.

    Zur Aufgabenlösung gibt es 2 Möglichkeiten:
    VBA-Code oder Kreuztabellen.
    Für einen Profi wäre VBA-Code einfacher, für einen Laien ist die Kreuztabelle leichter? zu verstehen.

    Ich melde mich bald mit der Lösung.
     
  3. Hascheff

    Hascheff Moderator

    Also ich hab als Namen der vorhandenen Abfrage "Abf-PersonAnwesenheit" gesetzt.
    Die Felder heißen bei mir:
    Name, aufnahmeDatum, entlassungsDatum
    Hast du andere Bezeichner, musst du nachfolgend alles anpassen. Wie gesagt, Name-ID wäre besser.
    Für die folgenden von mir erstellten Abfragen gebe ich den SQL-Code. Den kopierst du in die SQL-Ansicht, dann müsste es klappen, wenn die Bezeichner identisch sind.

    Eine Kreuzabfrage:
    Code:
    TRANSFORM Min([Tab-PersonAnwesenheit].aufnahmeDatum) AS [Min von aufnahmeDatum]
    SELECT [Tab-PersonAnwesenheit].Name
    FROM [Tab-PersonAnwesenheit]
    GROUP BY [Tab-PersonAnwesenheit].Name
    PIVOT "AufnDatum";
    Diese Datei nennst du "Abf-Aufn-Datum"

    Die nächste ist ähnlich:
    Code:
    TRANSFORM Max([Tab-PersonAnwesenheit].entlassungsDatum) AS [Max von entlassungsDatum]
    SELECT [Tab-PersonAnwesenheit].Name
    FROM [Tab-PersonAnwesenheit]
    GROUP BY [Tab-PersonAnwesenheit].Name
    PIVOT "EntlassDatum";
    Diese Datei nennst du "Abf-Entl-Datum"
    Und zum Schluss eine Auswahlabfrage:
    Code:
    SELECT [Abf-Aufn-Datum].Name, [Abf-Entl-Datum]![EntlassDatum]-[Abf-Aufn-Datum]![AufnDatum] AS Tage
    FROM [Abf-Aufn-Datum] INNER JOIN [Abf-Entl-Datum] ON [Abf-Aufn-Datum].Name = [Abf-Entl-Datum].Name
    ORDER BY [Abf-Aufn-Datum].Name;
    Die kannst du nennen wie du willst.

    Ich arbeite mit Access 2000, es dürfte aber keine Unterschiede geben.
     
  4. kli02

    kli02 ROM

    Hallo Hascheff,
    danke fuer deine meldung.

    Namen kommen alle mehrmals vor.

    Gruss
    kli02
     
  5. Hascheff

    Hascheff Moderator

    Drück dich mal präziser aus!
     
  6. kli02

    kli02 ROM

    Hallo Hascheff,

    Der Sachverhalt ist vollgender aus einer externen Datenbank habe ich eine Tabellenerstellung abfrage gemacht und zwar alle Namen die mehr als einmal vorkommen. das heist alle Namen kommen mehrmals vor.
    Ich möcht nun wiessen wer wurde <3Tage entlassen und wieder
    aufgenomen. Beispiel:Name :"Werner" Berechnen ob es <3Tage sind Entlassung "3.1.06" und Aufnahme "5.1.06"
    Die Tabelle sieht etwa so aus.
    Name | Aufnahme | Entlassung

    Werner | 1.1.06 | 3.1.06
    Werner | 5.1.06 | 6.1.06
    Werner | 11.1.06| 15.1.06
    Susi | 5.1.06 | 6.1.06
    Susi | 15.1.06 | 16.1.06

    Gruß
    kli02
     
  7. Hascheff

    Hascheff Moderator

    Also möchtest du geliefert bekommen:

    Werner 2 Tage
    Werner 5 Tage
    Susi 9 Tage

    oder

    Werner 5 Tage
    Susi 9 Tage

    oder

    Werner 2 Tage
    Susi 9 Tage
    ?

    Und du hast keine Angst, dass 2 verschiedene Personen Werner heißen?
     
  8. TheD0CT0R

    TheD0CT0R Dr. h.c. Mod

    Thread :schieb:
     
  9. kli02

    kli02 ROM


    Nein es ist der gleiche Werner es kommen noch Daten dahinter wie Geb. Datum usw.
    Im Beispie hätte ich gerne das ergebniss Werner (3.1.07-5.1.07)=2Tage ;(6.1.07-11.1.07)=5Tage
     
  10. Hascheff

    Hascheff Moderator

    Ja, dann müssen wir noch mal von vorn anfangen. da muss ich erst mal nachdenken und probieren. Ich melde mich wieder.
     
  11. Hascheff

    Hascheff Moderator

    Hallo kli02,

    So, jetzt hab ich's. War etwas knifflig, weil bei manchem Lösungsversuch Fehlermeldungen kamen. Ich hatte es mir etwas anders vorgestellt. (Neue Spalte, Aktualisierungsabfrage, fertig)

    Basis ist eine Tabelle Tab-PersonAnwesenheit mit den Feldern Name, aufnahmeDatum, entlassungsDatum.

    Davon brauchen wir eine "Kopie" ->"_Tab-PersonAnwesenheit":
    Code:
    SELECT [Tab-PersonAnwesenheit].Name, [Tab-PersonAnwesenheit].aufnahmeDatum, [Tab-PersonAnwesenheit].entlassungsDatum
    FROM [Tab-PersonAnwesenheit];
    Die beiden kommen zusammen ->"_Tab-MitVorentlDat":
    Code:
    SELECT [Tab-PersonAnwesenheit].Name, [Tab-PersonAnwesenheit].aufnahmeDatum, [Tab-PersonAnwesenheit].entlassungsDatum, [_Tab-PersonAnwesenheit].entlassungsDatum AS [Alt-ED]
    FROM [Tab-PersonAnwesenheit] INNER JOIN [_Tab-PersonAnwesenheit] ON [Tab-PersonAnwesenheit].Name = [_Tab-PersonAnwesenheit].Name
    WHERE ((([_Tab-PersonAnwesenheit].entlassungsDatum)<[Tab-PersonAnwesenheit]![aufnahmeDatum]))
    ORDER BY [Tab-PersonAnwesenheit].Name, [Tab-PersonAnwesenheit].aufnahmeDatum;
    Daraus wird eine Kreuztabellenabfrage ->"Abf-Aufn-Datum":
    Code:
    TRANSFORM Max([_Tab-MitVorentlDat].[Alt-ED]) AS [Max von Alt-ED]
    SELECT [_Tab-MitVorentlDat].Name, [_Tab-MitVorentlDat].aufnahmeDatum, [_Tab-MitVorentlDat].entlassungsDatum
    FROM [_Tab-MitVorentlDat]
    GROUP BY [_Tab-MitVorentlDat].Name, [_Tab-MitVorentlDat].aufnahmeDatum, [_Tab-MitVorentlDat].entlassungsDatum
    PIVOT "AltEntlassung";
    Aus der kann man in einer Auswahlabfrage die Zeitabstände berechnen und was man sonst noch will:
    Code:
    SELECT [Abf-Aufn-Datum].Name, [Abf-Aufn-Datum].AltEntlassung, [Abf-Aufn-Datum].aufnahmeDatum, [Abf-Aufn-Datum]![aufnahmeDatum]-[Abf-Aufn-Datum]![AltEntlassung] AS Dauer
    FROM [Abf-Aufn-Datum];
     
  12. kli02

    kli02 ROM

    soweit bin ich,

    SELECT Tab_Pers.name, DateDiff("d",[Aufn],[Entl]) AS Liegezeit, *FROM Tab_Pers
    WHERE (((Tab_Pers.name)=[name]) AND ((DateDiff("d",[Aufn],[Entl]))<3));

    Wie springe ich zur nächsten Zeile.

    gruß
    kli02
     
  13. kli02

    kli02 ROM


    soweit bin ich,
    SELECT Tab_Pers.name, DateDiff("d",[Aufn],[Entl]) AS Liegezeit, *FROM Tab_Pers
    WHERE (((Tab_Pers.name)=[name]) AND ((DateDiff("d",[Aufn],[Entl]))<3));

    Wie springe ich zur nächsten Zeile.

    gruß
    kli02
     
  14. Hascheff

    Hascheff Moderator

    Wenn du eine meiner Abfragen erstellen willst:
    Abfrage - Neu - Entwurfsansicht
    Das Fenster zum Einfügen von Tabellen sofort schließen.
    In der Entwurfsansicht: Ansicht - SQL (Wird jetzt auch ganz links in der Symbolleiste angezeigt.)
    In der SQL-Ansicht meinen Code einfügen.

    Die von mir vorgegebene Reihenfolge einhalten, sonst hagelt es Fehlermeldungen.
    Bei der ersten Abfrage müssen evtl. die Bezeichner angepasst werden.
    Einfacher wäre es aber, deine Bezeichner in der Tabelle vorher anzupassen.

    Wenn in Extras - Optionen - Allgemein - Objektnamen Autokorrektur die Einstellung "Ausführen" gewählt ist, kannst du danach wieder deine alten Bezeichner wählen.
     
Thread Status:
Not open for further replies.

Share This Page