Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage Monate und 2 Monate davor

Begonnen von uwe01, September 11, 2019, 18:12:51

⏪ vorheriges - nächstes ⏩

uwe01

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
Gruß Uwe01
Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

ebs17

#1
Zitateine Idee
Zeiträume erfasst man am Besten über ihre Grenzen:
WHERE DatumsFeld BETWEEN BeginnTag AND EndeTag
Mit freundlichem Glück Auf!

Eberhard

uwe01

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?
Gruß Uwe01
Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

MzKlMu

Hallo,
zeige bitte den SQL Code er Abfrage, wie sonst soll man da Fehler erkennen ?
Gruß Klaus

ebs17

#4
ZitatHabe dein Code mal in den Kriterien eingegen
Autsch. ==> SQL-Ansicht

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)
Mit freundlichem Glück Auf!

Eberhard

uwe01

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]))));

Gruß Uwe01
Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

MzKlMu

@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.
Gruß Klaus

uwe01

@Eberhard
wo wird den der Code von dir eingeben, doch bestimmt nicht in der Abfrage oder?
Gruß Uwe01
Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

ebs17

Mit freundlichem Glück Auf!

Eberhard

uwe01

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
Gruß Uwe01
Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

uwe01

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
Gruß Uwe01
Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard