Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: uwe01 am September 11, 2019, 18:12:51

Titel: Abfrage Monate und 2 Monate davor
Beitrag von: uwe01 am September 11, 2019, 18:12:51
Hallo Gemeinde,
habe da wieder einmal ein Problem.
In meiner Tabelle habe ich ein Datums Feld. Die Tabelle spreche ich mit einer Abfrage an wo das Datum nach Monate Abgefragt wird. Das Datum ist ein Termin  für Prüfungen das geht auch wunderbar. Habe beim Datum  ein Kriterium eingegeben mit diesem Befehl(den ich auch von einer Hilfe von hier habe)
[Monate].[Monatzahl] Und [UVV Monat eingeben "zb 3 für März nicht 03"]Monat(DatAdd("m";+6;[UVV]))
Nun benötige ich aber die Abfrage etwas anders. Ich möchte jetzt nicht nur den ausgewählten Monat angezeigt bekommen, sondern auch die letzten 2 Monate davor falls noch ein Prüfdatum offen ist.
Ich habe schon mit Abfragen für Quartal  Probiert aber das gefällt mir nicht richtig.
Hat da einer eine Idee wie ich das Kriterium ändern muss damit es klappt.

Gruß Uwe01
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: ebs17 am September 11, 2019, 18:32:52
Zitateine Idee
Zeiträume erfasst man am Besten über ihre Grenzen:
WHERE DatumsFeld BETWEEN BeginnTag AND EndeTag
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: uwe01 am September 11, 2019, 19:01:41
Hallo ebs17,

danke dir ersteinmal für deine schnelle Antwort.
Habe dein Code mal in den Kriterien eingegen, aber wenn ich die Abfrage Starte erhalte ich keine Daten.
Es wird auch nicht nach dem Monat gefragt. Woher weiß dann der Code das man nach Monate Abfragt?
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: MzKlMu am September 11, 2019, 19:07:03
Hallo,
zeige bitte den SQL Code er Abfrage, wie sonst soll man da Fehler erkennen ?
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: ebs17 am September 11, 2019, 19:31:53
ZitatHabe dein Code mal in den Kriterien eingegen
Autsch. ==> SQL-Ansicht (https://www.ardiman.de/datenbanken/grundlagen/abfragen/#SEC2)

Das Gezeigte war jetzt nur die WHERE-Klausel als IDEE, nicht kopierfähig fertig, schon mal deswegen, weil Deine Angaben nicht vollständig sind. Zu einem Monat gehört eine Jahresangabe dazu, oder wie willst Du von einem Januar auf den Dezember und November schließen? Wie auch: Bei etwas größerer Datenlage hat man Daten über mehrere Jahre. Da soll es vorkommen, dass der September mehrfach vorkommt, so jedes Jahr einmal.

Als vollständige Parameterabfrage:
PARAMETERS
   xJahr INT,
   xMonat INT
;
SELECT
   *
FROM
   TabelleX
WHERE
   Datumsfeld BETWEEN DateSerial(xJahr, xMonat - 2, 1)
      AND
   DateSerial(xJahr, xMonat + 1, 0)
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: uwe01 am September 11, 2019, 19:32:56
Hallo MzKIMu,

hier den Code für die Monats Abfrage

WHERE (((Month([Wiederholungsprüfung]))=[Monate].[Monatzahl] And (Month([Wiederholungsprüfung]))=[UVV Monat eingeben "zb 3 für März nicht 03"])) OR (((Month([Wiederholungsprüfung]))=Month(DateAdd("m",+6,[Wiederholungsprüfung]))));

Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: MzKlMu am September 11, 2019, 19:44:48
@Uwe
In Deiner in #5 gezeigten Umsetzung ist ja nichts von dem Vorschlag von Eberhard enthalten. Wie kommst Du dann zu dieser Aussage:
ZitatHabe dein Code mal in den Kriterien eingegen,

Aber Eberhard hat ja inzwischen die Lösung gepostet.
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: uwe01 am September 11, 2019, 20:08:54
@Eberhard
wo wird den der Code von dir eingeben, doch bestimmt nicht in der Abfrage oder?
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: ebs17 am September 11, 2019, 20:31:55
SQL-Ansicht
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: uwe01 am September 12, 2019, 20:11:42
Hallo Eberhardt,
Ich danke dir für den SQL Code. Aber ich habe noch nie SQL Code direkt eingetragen, sondern nur immer in der Entwurfsansicht. Ich habe mir aber Mal die Code angeschaut das ist ja alles in einer Zeile geschrieben, und dein Code ist ja in mehreren Zeilen geschrieben.und da weiß ich leider nicht wie ich ihn zusammen setzen muss. Wenn es dir nicht zu viel Aufwand ist kannst du ihn mir so zusammensetzen das ich den Code Copyren und im SQL einsetzen kann.
Ich Danke dir
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: uwe01 am September 13, 2019, 13:06:59
Hallo Gemeinde,
@Eberhardt,
@MzKIMu,
danke für eure Hilfe habe es hin bekommen und es klappt sogar. Habe aber ein anderen SQL Code genommen den ich über der Entwurfsansicht ein gegeben habe.
WHERE (((Year([UVV]))=Year(Now())) AND ((Month([UVV]))=Month(Now()))) OR (((Year([UVV])*12+DatePart("m",[UVV]))=Year(Date())*12+DatePart("m",Date())-1)) OR (((Year([UVV])*12+DatePart("m",[UVV]))=Year(Date())*12+DatePart("m",Date())-2))
ORDER BY Hersteller.UVV;

Nochmal vielen Dank Euch
Titel: Re: Abfrage Monate und 2 Monate davor
Beitrag von: ebs17 am September 13, 2019, 14:23:43
ZitatAber ich habe noch nie SQL Code direkt eingetragen, sondern nur immer in der Entwurfsansicht.
Die Entwurfsansicht erzeugt auch nur SQL-Code, und nur SQL-Code wird von der Datenbankmaschine verarbeitet. Also sollte man irgendwann damit beginnen, so wie man irgendwann auch die Stützräder vom Fahrrad abschraubt, um z.B. richtige Kurven oder auch durchs Gelände fahren zu können.

Deine Variante ist
- vom Ansehen her grausam,
- unübersichtlich,
- vor allem macht er aber eine Nutzung von möglicherweise vorhandenen Indizes unmöglich. Damit wird Performance verschenkt, die man bei datenbankgemäßen Datenmengen womöglich dringend braucht.