Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ironpete am Januar 23, 2013, 09:58:06

Titel: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: ironpete am Januar 23, 2013, 09:58:06
Ich habe ein LOG Tabelle, in die täglich verschiedene Werte abgespeichert werden. Sagen wir
itemNo, qty, date

Nun möchte ich die Werte abhängig vom Datum per Abfrage voneinander abziehen, d.h. z.B. qty von date() - qty von date()-5

Ich kriege das sql statement nicht zusammen und per Abfrage-Assisstent auch nicht. :-\

Stümperhaft habe ich bisher folgendes gemacht:
Abfrage1: Select * FROM LOG where date()
Abfrage2: Select * FROM LOG where date()-5
Abfrage 3: Select Abfrage1.itemNo, Abfrage1.qty-Abfrage2.qty AS delta FROM Abfrage1 LEFT JOIN Abfrage2 ON Abfrage1.itemNo = Abfrage2.itemNo;

Wie müsste ich es schreiben, damit das in ein sql statement passt?


Letztendlich möchte ich die LOG Tabelle per Kalenderfunktion filtern, indem ich aus einem formular einen Wert DatumVon und DatumBis übergebe. Formular und Kalenderfunktion stehen schon. Es fehlt nur noch die Abfrage, die mit den Datumswerten gefüttert werden soll.
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: database am Januar 23, 2013, 13:16:44
Hallo,

versuch mal so:

Abfrage1: Select * FROM LOG where date = date()

Abfrage2: Select * FROM LOG where date = date()-5


SELECT Sum([qry1].[qty]-[qry2].[qty]) AS DELTA, qry1.itemNo
FROM qry1 INNER JOIN qry2 ON qry1.itemNo = qry2.itemNo
GROUP BY qry1.itemNo;


HTH
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: ironpete am Januar 23, 2013, 14:06:22
super, danke. Habe es fast 1:1 übernommen. so hat es funktioniert


SELECT q1.qty - q2.qty AS delta. q1.itemNO
FROM LOG AS q1 LEFT JOIN LOG AS q2 ON q1.itemno = q2.itemno
WHERE  q1.datum=#date1# and q2.datum=#date2#


Jetzt habe ich nur noch eine Frage: Manchmal gibt es zwar datum1 aber nicht datum2 in der Tabelle, weil eine itemNo an dem jeweilgen Tag nicht vorhanden war. D.h. ich will datum1-datum2 rechnen, geht aber nicht.

habe das hier versucht, geht aber nicht. Liefert nichts zurück. Gibt es etwas geeigneteres als mit IsNull zu prüfen, ob überhaupt ein Eintrag vorhanden ist?

SELECT q2.itemNo, q2.qty-(IIf(IsNull(q1.qty),0,q1.qty)) AS delta
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: MzKlMu am Januar 23, 2013, 18:11:16
Hallo,
was willst Du für einen Ersatzwert (Datum) verwenden, wenn das Feld leer ist?
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: ironpete am Januar 24, 2013, 15:48:44
sagen wir 01.01.1900

Ich dachte wenn ich einen LEFT JOIN mache, dann müssten mir alle Werte angezeigt werden. Im Moment ist es als ob es ein inner join sei.

q1 hat am 22.01.2013 200 Einträge
q2 hat am 21.01.2013 170 Einträge

Bei
SELECT q1.qty - (wenn(isnull(q2.qty);0;q2.qty)) AS delta, q1.itemNO
FROM LOG AS q1 LEFT JOIN LOG AS q2 ON q1.itemno = q2.itemno
WHERE  q1.datum=#22.01.2013# and q2.datum=#21.01.2013#

müsste ich doch 200 Einträge bekommen. Leider sind es genau nur 170
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: MzKlMu am Januar 24, 2013, 17:01:42
Hallo,
verwende mal Right statt Left.
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: ironpete am Januar 25, 2013, 17:49:20
hallo,

RIGHT macht keinen Sinn, weil die "rechte" tabelle nur 170 Einträge hat. Die linke hat 200 und ich möchte alle Einträge der linken sehen. :-\
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: database am Januar 25, 2013, 18:04:51
Hallo,

was passiert, wenn du gemäß meinem Vorschlag die Log-Tabelle VORHER durch 2 Abfragen aufteilst und dich dann auf die Felder der Abfragen beziehst?

sonst:

SELECT q1.qty - NZ(q2.qty;0) AS delta

ZitatRIGHT macht keinen Sinn, weil die "rechte" tabelle nur 170 Einträge hat. ...

Das siehst du ja ganz genau in den Eigenschaften der Verknüpfung ... ALLE DS von Tabelle1 und nur die DS von TAbelle 2, bei denen die ...  /  ALLE DS von Tabelle 2 ....

Somit macht RIGHT wohl einen Sinn, da MzKlMu ja nicht wissen kann, welche Tabelle bei dir rechts und welche links steht.

Übrigens ... bei mir funktioniert es mit LEFT JOIN


[Anhang gelöscht durch Administrator]
Titel: Re: Werte einer Tabelle abhängig vom Datum voneinander abziehen
Beitrag von: ironpete am Januar 28, 2013, 12:55:24
wenn ich es in 2 Abfragen teile und dann die differenz bilde, klappt es wunderbar.

Der JOIN scheint ne Macke zu haben.

Ich belasse es einfach bei den drei Abfragen. Es funktioniert. Danke für die Mühe und Hilfe!