hipfzwirgel
Goto Top

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?

Content-ID: 91583423254

Url: https://administrator.de/forum/auswahlabfrage-mit-kalenderwoche-als-kriterium-91583423254.html

Ausgedruckt am: 22.12.2024 um 07:12 Uhr

em-pie
em-pie 21.06.2024 um 12:55:32 Uhr
Goto Top
Moin,

mal aus der (MS) SQL-Syntax heraus - die müsstest du dann "adaptieren":
SELECT * 
FROM myTable 
WHERE CONCAT(DATEPART(year, lieferdatum), '-', DATEPART(iso_week, lieferdatum)) = CONCAT(DATEPART(year, eingabedatum), '-', DATEPART(iso_week, eingabedatum))  
13034433319
Lösung 13034433319 21.06.2024 aktualisiert um 18:07:22 Uhr
Goto Top
"adaptieren":
Access-Schreibe als "Filter-Ausdruck" sieht so aus
Jahr([TabelleXYZ].[Lieferdatum]) & "-" & DatTeil("ww";[TabelleXYZ].[Lieferdatum])=Jahr([EingabeDatum]) & "-" & DatTeil("ww";[EingabeDatum])  
Gruß
ukulele-7
ukulele-7 22.06.2024 um 08:13:29 Uhr
Goto Top
Zitat von @em-pie:

SELECT * 
FROM myTable 
WHERE CONCAT(DATEPART(year, lieferdatum), '-', DATEPART(iso_week, lieferdatum)) = CONCAT(DATEPART(year, eingabedatum), '-', DATEPART(iso_week, eingabedatum))  
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.
em-pie
em-pie 22.06.2024 aktualisiert um 09:00:42 Uhr
Goto Top
@ukulele-7
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- ...
13034433319
13034433319 22.06.2024 aktualisiert um 09:49:07 Uhr
Goto Top
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.
ukulele-7
ukulele-7 22.06.2024 um 11:07:15 Uhr
Goto Top
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.
13034433319
13034433319 22.06.2024 aktualisiert um 18:02:40 Uhr
Goto Top
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.
ukulele-7
ukulele-7 24.06.2024 um 08:55:37 Uhr
Goto Top
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.
hipfzwirgel
hipfzwirgel 24.06.2024 um 11:32:34 Uhr
Goto Top
Hallo liebe Antworter,

ich danke euch allen für eure Beiträge. Die Antwort von @13034433319
hat funktioniert.

Damit habe ich jetzt ein Endlosformular generiert.