Hallo zusammen,
in einer Abfrage benötige ich eine Eingrenzung von Verträgen die in 4 Monaten bis 5 Monaten ablaufen. Das ganze basiert auf einem Datums Feld [Vertragsbeginn]. Alle Verträge laufen 1 Jahr, sind aber teilweise an verschiedenen Tagen in einem Monat der letzten Jahre begonnen. Angezeigt werden sollen demnach alle Verträge die, Stand heute, im April und Mai kommenden Jahres, auslaufen würden. Im Januar dann entsprechend die, die im Mai und Juni auslaufen.
Ich habe versucht, nur den Monat aus dem Datum zu filtern, scheitere dann aber natürlich an dem kommenden Jahr. Mit der DatDiff Funktion, komme ich auch keinen Schritt weiter.
Hat da jemand eine Idee?
Hallo,
schau mal ob das passt:
SELECT *
FROM Tabellenname
WHERE DateAdd("yyyy",1,[Vertragsbeginn])<DateSerial(Year(Date()),Month(Date())+6,0) And (DateAdd("yyyy",1,[Vertragsbeginn]))>=DateSerial(Year(Date()),Month(Date())+4,1)
Hi, soweit ja, Danke schonmal das hat mich ne ganze Ecke weitergebracht, allerdings zeigt der mir nur die Verträge an, die als Vertragsbeginn dieses Jahr eingetragen haben. Insgesamt habe ich eine Tabelle mit 4800 Datensätze (Versicherungsverträge) bei denen ich unterschiedliche Beginndaten aus den letzten Jahren habe. Alle Verträge haben eine drei monatige Kündigungsfrist.
Ich habe jetzt schon damit rum gespielt, bekomme ihn aber nicht dazu, alle Datumsangaben zu berücksichtigen. Hast Du noch eine Idee?
Zitatin einer Abfrage benötige ich eine Eingrenzung von Verträgen die in 4 Monaten bis 5 Monaten ablaufen
Bei einjähriger Laufzeit hätten diese Verträge also vor 8 bis vor 7 Monaten begonnen. Darauf kann man eine einfache und auch indexnutzende Zeitraumabfrage aufbauen:
WHERE Vertragsbeginn BETWEEN DateAdd("m", -8, Date()) AND DateAdd("m", -7, Date())
Brauchst Du jeweils volle Kalendermonate, würde man sehr ähnlich vorgehen.
Hi, nicht ganz, die Verträge haben teilweise auch schon in 2008, 2009 oder wann auch immer begonnen. Verlängern sich nur jeweils um 1 Jahr, können aber vor Ablauf, 3 Monate im voraus gekündigt werden.
Insofern filtert mir das System mit der WHERE Abfrage ja nur die Verträge des aktuellen Jahres.
ansatzweise müsste ich eigentlich die Verträge filtern die entweder über die Kalenderwoche (ziemlich ungenau) oder aber über Tag und Monat in der Zukunft enden. Da bekomme ich aber die Where Abfrage nicht hin...
Ausgeschrieben würde das heißen:
Zwischen (Vertragsbeginn Tag und Monat (Heute) in 4 Monaten) UND (Vertragsbeginn Tag und Monat (Heute) in 5 Monaten)
--- Ein wenig Stümperhaft aber hilft zum Verständnis, mir zumindest :-) ---
in den Tabellen habe ich dann die Daten:
01.06.2008
01.01.2009
01.02.2006
14.3.2014
18.04.2014
01.05.2001
etc.
Dabei sollte er mir ausschließlich nur die beiden Daten anzeigen:
18.04.2014
01.05.2001
Versicherungen sind nicht nur der unbeliebteste Job Deutschlands, sondern auch der komplizierteste :-D...
Danke aber schonmal für die Mühe und Anregungen.
Zitat von: ggen76 am Dezember 08, 2014, 16:39:45Alle Verträge laufen 1 Jahr
Angezeigt werden sollen demnach alle Verträge die, Stand heute, im April und Mai kommenden Jahres, auslaufen würden?!
Zitatdie Verträge haben teilweise auch schon in 2008, 2009 oder wann auch immer begonnen. Verlängern sich nur jeweils um 1 Jahr
Entscheidend ist also lediglich das Anfangsdatum eines Vertrags und sein Status (aktiv/gekündigt)?!
PS:
ZitatDa bekomme ich aber die Where Abfrage nicht hin.
Zeig doch bitte mal den SQL-Code dazu.
SELECT
DateAdd("yyyy", T.I, V.Vertragsbeginn) AS MyDay,
V.*
FROM
tblVertrag AS V,
T999 AS T
WHERE
T.I BETWEEN 0 AND 100
AND
V.Ungekuendigt = True
AND
DateAdd("yyyy", T.I, V.Vertragsbeginn) BETWEEN DateAdd("m", 4, Date())
AND
DateAdd("m", 5, Date())
Tabelle T999 aus SQL ist leicht (1) - Hilfstabellen (http://www.ms-office-forum.net/forum/showthread.php?t=298414)
Eine Vorschau auf 100 Jahre ist ausreichend?