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
Zitateine Idee
Zeiträume erfasst man am Besten über ihre Grenzen:
WHERE DatumsFeld BETWEEN BeginnTag AND EndeTag
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?
Hallo,
zeige bitte den SQL Code er Abfrage, wie sonst soll man da Fehler erkennen ?
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)
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]))));
@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.
@Eberhard
wo wird den der Code von dir eingeben, doch bestimmt nicht in der Abfrage oder?
SQL-Ansicht
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
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
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.