Neuigkeiten:

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

Mobiles Hauptmenü

Frage zu Datums-Kriterium Abfrage

Begonnen von Paule, Februar 25, 2016, 10:33:53

⏪ vorheriges - nächstes ⏩

Paule

Hallo,

ich sitze gerade an einem Problem bezüglich Access.

Ich habe eine Tabelle mit meinen Kunden, den Verkaufsdatum und sonstigen.

Nun möchte ich eine Abfrage starten, die nur die Verkäufe eines bestimmten Zeitraums anzeigt.

Die Abfrage soll immer zum Ende des Monats hin erstellt werden.
Angenommen wir befinden uns jetzt im am 25.2.2016 soll sie folgende Verkäufe zeigen:

-Verkäufe bis spätestens Ende Januar.
-Verkäufe seit einschließlich Januar 2013.

Das Intervall ist also größer als vor 37 Monaten bis einshcließlich vor einem Monat.

Gerade für die zweite Bedingung (kleiner gleich vorheriger Monat) habe ich schon die Formel:
Jahr([SalesDate])*12+DatTeil('m';[SalesDate])=Jahr(Datum())*12+DatTeil("m";Datum())-1

Diese gebe ich nun bei der Abfrage als Kriterium unter der Spalte SalesDate an. Dann zeigt er mir auch wunderbar nur die Verkäufe von Januar 2016. 
Jetzt wollte ich mal angeben, dass er mir nicht nur alle von Januar 2016 angibt, sondern auch die die davor sind. Aber das kann ich über die kleiner/größer gleich Zeichen nicht mehr darstellen in Access.

Weiß jemand Rat?

Vielen Dank,
Marcus

DF6GL

Hallo,

wenn ich es richtig deute, willst Du alle Verkäufe anzeigen, die

zwischen 01.01.2013 und 31.01.2016

liegen.

Dann lautet das Kriterium (bei deutschen Access)  für die Spalte "SalesDate" etwa so:

zwischen #01.01.2013# und #31.01.2016#

Wenn das Enddatum sich am akt. Datum orientiert und dabei der Letzte des Vormonats genommen werden soll, dann etwa so:

zwischen #01.01.2013# und DateSerial(Jahr(Datum());Monat(Datum());0)


Wodran sich das Startdatum orientiert, mußt Du selber wissen...


Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

#2
Hi!

Danke erstmal für die schnelle Hilfe.

In der Tat suche ich in diesem Monat die Verkäufe zwischen 1.1.2013 und 31.1.2016. Im März dann zwischen 1.2.2013 und 29.2.2016. Und so weiter. Sowohl Enddatum als auch Startdatum sind flexibel.

Ich möchte die Abfrage nun so gestalten, dass ich keine expliziten Datumsangaben verwenden muss, weil dann müsste ich ja jeden Monat das Kriterium verändern. Es soll möglichst automatisch funktionieren.

Ich hab es soweit jetzt hinbekommen...
Ich bräuchte nur noch eine "Formel" die dem Programm sagt, dass es mir die Sales von vor 3 Jahren und 1 Monat anzeigen soll.

Wenn es also Februar 2016 ist, dann soll er mir die Daten von Januar 2013 angeben. Wenn es März 2016 ist, dann die Verkäufe von Februar 2013 usw.
Geht das?

ebs17

Fortführung des Vorschlages von Franz:
SELECT
   *
FROM
   tblVerkaufe
WHERE
   Verkaufsdatum >= DateSerial(Year(Date() - 3, Month(Date()) - 1, 1)
      AND
   Verkaufsdatum < DateSerial(Year(Date(), Month(Date()), 1)

(Das ist eine vollständige Abfrage, nicht ein Kriterium.)
Mit freundlichem Glück Auf!

Eberhard

Paule

Hm...das verstehe ich leider nicht ganz.

Die Tabelle aus der er sich die Daten ziehen soll heißt:

KIVACustomer

Die besteht aus den Feldern:
-CustomerID
-ContractID
-SalesDate
-Product
-MonthlyPayment
-Interest

Ich will über die Abfrage jetzt folgende Felder in der Abfrage-Tabelle stehen haben:
-CustomerID
-ContractID
-MonthlyPayment
-Interest

Und dabei nur die drin stehen haben, die jeweils in dem gegebenen Intervall liegen.



Erstelle ich jetzt eine neue Abfrage wie eben beschrieben, dann komme ich zu dem Text:

SELECT *FROM tblKIVACustomer

Where
[KIVACustomer]![SalesDate] >= DateSerial(YEAR(DATE() - 3, MONTH (DATE())-1,1)
AND
[KIVACustomer]![SalesDate] < DateSerial(YEAR(DATE(), MONTH(DATE()),-1)

Aber dann gibt er mir Fehlermeldung über fehlende Operatoren aus. ?


Ich habe mal meinen Stand soweit angehängt. In meiner Abfrage stimmt soweit alles bei dem Kriterium bis auf das Startdatum. Zu Vereinfachungszwecken hatte ich das jetzt mal auf Datum von heute minus 3 Jahre gesetzt, aber es fehlt noch der eine Monat, den ich auch noch abziehen muss? Gibt es dafür keine einfache Lösung?

Mein Kriterium sieht soweit so aus:

Jahr([KIVACustomer]![SalesDate])>=Jahr(Datum())-3 Und Jahr([KIVACustomer]![SalesDate])*12+DatTeil("m";[KIVACustomer]![SalesDate])<=Jahr(Datum())*12+DatTeil("m";Datum())-1


Ansonsten wäre es super lieb, wenn ich das mit der Abfrage mit dem SQL-Code nochmal etwas genauer erklärt bekomme... da bin ich nicht wirklich fit drinnen, wie ich da vorgehen muss vom Erstellen der Abfrage aus...

Sorry für die dummen Fragen... :(

MaggieMay

Hi,

da fehlt eine Klammer und ein Leerzeichen nach dem Stern:
SELECT * FROM tblKIVACustomer
Where
[KIVACustomer]![SalesDate] >= DateSerial(YEAR(DATE() - 3, MONTH (DATE())-1,1)
AND
[KIVACustomer]![SalesDate] < DateSerial(YEAR(DATE()[size=14pt][color=red])[/color][/size], MONTH(DATE()),-1)
Freundliche Grüße
MaggieMay

DF6GL

Hallo,

ausserdem sollte schon genau umgesetzt  werden...


Beim Between-Beispiel ist der Letzte der Vormonats zu berechnen,

bei den <=   and    >  -  Vergleichen ist der Erste des akt. Monats zu benutzen und nicht der Vorletzte des Vormonats:


SELECT * FROM tblKIVACustomer
Where
[KIVACustomer]![SalesDate] >= DateSerial(YEAR(DATE() - 3, MONTH (DATE())-1,1)
AND
[KIVACustomer]![SalesDate] < DateSerial(YEAR(DATE()), MONTH(DATE()),1)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Zitat von: DF6GL am Februar 25, 2016, 14:36:22
Hallo,

ausserdem sollte schon genau umgesetzt  werden...


Beim Between-Beispiel ist der Letzte der Vormonats zu berechnen,

bei den <=   and    >  -  Vergleichen ist der Erste des akt. Monats zu benutzen und nicht der Vorletzte des Vormonats:


SELECT * FROM tblKIVACustomer
Where
[KIVACustomer]![SalesDate] >= DateSerial(YEAR(DATE() - 3, MONTH (DATE())-1,1)
AND
[KIVACustomer]![SalesDate] < DateSerial(YEAR(DATE()), MONTH(DATE()),1)

Hi...

ich bin nun auf "Erstellen" gegangen, "Abfrageentwurf" und habe dann keine Tabellen ausgewählt, sondern bin mit Rechtsklick unter "Abfrage1" auf SQL-Code gegangen und habe dann deinen Code eingefügt.

Er sagt mir immer noch:
"Fehlendes Element, ) oder ] im Abfrageausdruck..."
In meinen Augen fehlt in der ersten <=-Zeile ein Komma, aber wo kommt es denn hin?

Oder mach ich noch etwas ganz anderes falsch?

DF6GL

Hallo,

es fehlt eine Klammer:

[KIVACustomer]![SalesDate] >= DateSerial(YEAR(DATE()) - 3, MONTH (DATE())-1,1)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Es geht immer noch nicht...aber wenigstens ist die Fehlermeldung eine Andere.

Aus irgendeinen Grund meint er, die Tabelle nicht zu finden...

Ich habe mal zwei Screenshots angehängt. In meinen Augen ist alles richtig geschrieben!

Ich kann nicht sehen,wo der Fehler sein soll...:(

DF6GL

Hallo,

ja, wir gucken auch nicht genau hin....  ;)

SELECT * FROM tblKIVACustomer
Where
[KIVACustomer].[SalesDate] >= DateSerial(YEAR(DATE() - 3, MONTH (DATE())-1,1)
AND
[KIVACustomer].[SalesDate] < DateSerial(YEAR(DATE()), MONTH(DATE()),1)


oder gleich weglassen

SELECT * FROM tblKIVACustomer
Where
SalesDate >= DateSerial(YEAR(DATE() - 3, MONTH (DATE())-1,1)
AND
SalesDate < DateSerial(YEAR(DATE()), MONTH(DATE()),1)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Paule

Sorry, aber ich muss weiter nerven.

Er sagt bei den beiden Versionen, dass er die Tabelle nicht finden kann. Ich habe sie jetzt nochmal umbenannt in KIVAC und auch das funktioniert nicht. Siehe Screenshot.

Gibt es eventuell eine Eigenschaft, die verhindert, dass ich auf die Tabelle zugreifen kann?

Sorry für das lästige Fragen...

MaggieMay

Hi,

die Tabelle heißt nun "KIVAC" bei dir und nicht "tblKIVAC".
Freundliche Grüße
MaggieMay

Paule

Zitat von: MaggieMay am Februar 26, 2016, 09:47:45
Hi,

die Tabelle heißt nun "KIVAC" bei dir und nicht "tblKIVAC".

::)
Oh man...

Es tut mir leid.

Vielen Dank für die fleißige Hilfe!!!