Auswahlabfrage mit Kalenderwoche als Kriterium
Hallo Gemeinde,
ich möchte eine Auswahlabfrage in Access implementieren, bei der ein Datum abgefragt wird. Anhand des eingegebenen
Datums sollen alle Einträge der entsprechenden KW angezeigt werden. Z.B. Nach Eingabe des Datums 23.05.2024
Sollen alle Einträge des Feldes Lieferdatum der KW 21 (20. -24.05.) angezeigt werden.
hat jemand eine Idee wie ich das hinbekomme?
Das Berechnete Feld Ausdruck: DatTeil("ww";Datum()) gibt zwar die KW aus aber wie filtere ich das Feld Lieferdatum damit?
ich möchte eine Auswahlabfrage in Access implementieren, bei der ein Datum abgefragt wird. Anhand des eingegebenen
Datums sollen alle Einträge der entsprechenden KW angezeigt werden. Z.B. Nach Eingabe des Datums 23.05.2024
Sollen alle Einträge des Feldes Lieferdatum der KW 21 (20. -24.05.) angezeigt werden.
hat jemand eine Idee wie ich das hinbekomme?
Das Berechnete Feld Ausdruck: DatTeil("ww";Datum()) gibt zwar die KW aus aber wie filtere ich das Feld Lieferdatum damit?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 91583423254
Url: https://administrator.de/contentid/91583423254
Ausgedruckt am: 21.11.2024 um 21:11 Uhr
9 Kommentare
Neuester Kommentar
"adaptieren":
Access-Schreibe als "Filter-Ausdruck" sieht so ausJahr([TabelleXYZ].[Lieferdatum]) & "-" & DatTeil("ww";[TabelleXYZ].[Lieferdatum])=Jahr([EingabeDatum]) & "-" & DatTeil("ww";[EingabeDatum])
Zitat von @em-pie:
Ich würde sagen in MSSQL wäre datepart(week,lieferdatum) besser geeignet. week zählt den 1.1. als KW1, iso_week den ersten Sonntag im Jahr. Ob Access auch einen derartigen Unterschied kennt, weiß ich nicht.SELECT *
FROM myTable
WHERE CONCAT(DATEPART(year, lieferdatum), '-', DATEPART(iso_week, lieferdatum)) = CONCAT(DATEPART(year, eingabedatum), '-', DATEPART(iso_week, eingabedatum))
@ukulele-7
Genau nicht.
Iso_week schaut, ob der 01.01. vor oder nach einem Donnerstag liegt:
Beispiel:
Genau nicht.
Iso_week schaut, ob der 01.01. vor oder nach einem Donnerstag liegt:
Beispiel:
- 02.01. wäre ein Freitag:
- Week gibt KW1 zurück
- Iso_week KW 52 (oder 53, ja nach Anzahl im Vorjahr)
- 02.01. ist ein Mittwoch
- week gibt KW 1 zurück
- iso_week gibt KW 1 zurück
iso_week datepart
ISO 8601 includes the ISO week-date system, a numbering system for weeks. Each week is associated with the year in which Thursday occurs. For example, week 1 of 2004 (2004W01) covered Monday, 29 December 2003 to Sunday, 4 January 2004. European countries/regions typically use this style of numbering. Non-European countries/regions typically don't use it.
Quelle: https://learn.microsoft.com/en-us/sql/t-sql/functions/datepart-transact- ...ISO 8601 includes the ISO week-date system, a numbering system for weeks. Each week is associated with the year in which Thursday occurs. For example, week 1 of 2004 (2004W01) covered Monday, 29 December 2003 to Sunday, 4 January 2004. European countries/regions typically use this style of numbering. Non-European countries/regions typically don't use it.
Sofern die Eingabevariable eh ein Datum ist wie er schreibt, ist die Definition der Kalenderwoche ja egal da sie ja nur für den Vergleich her hält ob das dann intern nun die europäische oder andere Kalenderwoche ist, juckt nicht, so lange beim Vergleich auf beiden Seiten die selben Parameter benutzt werden.
Der Vergleich muss ja die Vorwoche ermitteln. Bei jeder Woche >1 ist das kein Problem, bei 1 wird es interessant. Dann kommt es darauf an wie man rechnet und wie man den Jahreswechsel mit einbezieht. Das einfachste wird wohl sein, vom Datum die Woche zu ermitteln und vom Datum einfach 7 Tage abzuziehen und dann von diesem Daten die Vorwoche zu ermitteln. Dann habe ich auf jeden Fall das richtige Jahr und die richtige Woche, egal ob week oder iso_week.
Der Vergleich muss ja die Vorwoche ermitteln
Braucht es nicht, es wird ja sowohl vom Lieferdatum als auch vom Eingabe-Datum immer das Jahr und die Kalenderwoche ermittelt und als String verknotet, mehr braucht es nicht für den Vergleich und das Filtern der Zeilen für sein Vorhaben.Klar man kann sich auch die Mühe machen manuell Anfangsdatum und Enddatum der KW zu ermitteln und dann >= als Anfang und <= Ende zu filtern. Schneller ist das auf jeden Fall wenn man das vorher als Variable ablegt, aber bei Access macht das den Bock auch nicht mehr fett.
es wird ja sowohl vom Lieferdatum als auch vom Eingabe-Datum immer das Jahr und die Kalenderwoche ermittelt und als String verknotet, mehr braucht es nicht für den Vergleich
Jein. Du hast dann einen String, z.B. 2023KW1 beim aktuellen Datum und jetzt willst du mit der Vorwoche vergleichen. Die Vorwoche hat auch einen String, das wäre 2022KW52, oder vielleicht auch 2023KW52, je nach Datumsbasis. Das jetzt zu vergleichen ist aber nicht so einfach, du musst ja immer noch auf einer Seite rechnen um eine Gleichung zu schaffen.
Einfacher wäre, zu jedem Datum nicht nur die KW sondern auch die Vor-KW zu ermitteln und dann die ermittelte Vor-KW mit der aktuellen KW der anderen Datensätze zu vergleichen. Die Vor-KW bekäme man relativ simpel mit datepart(iso_week,dateadd(week,-1,Datum)) allerdings kann das bei iso_week unterschiedliche Jahre liefern. Daher würde ich immer erst first date of week ermitteln, davon das Jahr und die KW und das noch einmal -1 Woche und davon das Jahr und die KW als Vor-KW.