Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Artikelpreis zu gegenem Datum (https://www.delphipraxis.net/60631-artikelpreis-zu-gegenem-datum.html)

Jelly 10. Jan 2006 10:47

Datenbank: MSSQL • Version: 2000 • Zugriff über: BDE

Artikelpreis zu gegenem Datum
 
Irgendwie häng ich ganz blöd bei einer SQL Abfrage.

Ich habe eine Tabelle Artikel, mit Feldern ID und Bezeichnung

Und eine Tabelle mit den aktuellen Artikelpreisen:
ID, Artikel, Preis, Datum

Soll heissen, im Laufe der Zeit kann sich ein Artikelpreis ändern. Das Datum in der Preis Tabelle ist der Wert, ab wann der angegebene Preis gültig ist.

Bsp: Artikel 1, 'Blubb'
Preise:
1, 1, 100, 01.01.2005
2, 1, 200, 01.01.2006
3, 1, 300, 01.01.2007

Ich brauche jetzt eine Liste mit allen Artikeln und allen korrekten Preisen zu einem gegebenem Datum, z.B. 01.02.2006.

Ich krieg das nicht hin. Ältere Preise krieg ich leicht weggefiltert, da ja das Suchdatum >= Preisdatum sein muss. Aber ich krieg den Eintrag 01.01.2007 mit Preisangabe 300 nicht weg aus dem Resultset.

Aenogym 10. Jan 2006 11:09

Re: Artikelpreis zu gegenem Datum
 
hi jelly,

du möchtest eine liste mit all deinen produkten haben, wo bei jedem produkt der preis eines bestimmten datums ist?

ich würde jetzt mal spontan folgendes vorschlagen:

SQL-Code:
SELECT a.Name, p.Preis
FROM artikel AS a
LEFT JOIN preise AS p ON p.Artikel = a.ID
WHERE p.Datum = '01.01.2006'
sollte doch funktionieren oder nicht?

aeno

tomsel 10. Jan 2006 11:28

Re: Artikelpreis zu gegenem Datum
 
Zitat:

Zitat von Aenogym
hi jelly,

du möchtest eine liste mit all deinen produkten haben, wo bei jedem produkt der preis eines bestimmten datums ist?

ich würde jetzt mal spontan folgendes vorschlagen:

SQL-Code:
SELECT a.Name, p.Preis
FROM artikel AS a
LEFT JOIN preise AS p ON p.Artikel = a.ID
WHERE p.Datum = '01.01.2006'
sollte doch funktionieren oder nicht?

aeno

Ich denke, es ist eher folgendes gemeint:

SQL-Code:
SELECT a.Name, p.Preis
FROM artikel AS a, preise AS p
WHERE p.Artikel = a.ID
AND p.Datum = MAX(SELECT p.Datum from artikel AS a, preise AS p where p.artikel = a.ID and p.Datum <= '01.01.2006')
Das sollen alle Artikel mit ihrem zum 01.01.2006 gültigen Preis sein, wenn ich das nicht total verkorkt hab.

sir-archimedes 10. Jan 2006 11:29

Re: Artikelpreis zu gegenem Datum
 
Nee das wird so einfach nicht funktionieren, da ja nicht jeden Tag der gültige Preis eingetragen wird. Das heißt man muss die letzte Aktualisierung vor dem Datum berücksichtigen.

Sowas könnte funktionieren:

SQL-Code:
DECLARE @Suchdatum datetime;
SET @Suchdatum = '01.01.2006'

SELECT a.Name, p.Preis
FROM artikel AS a
LEFT JOIN preise AS p ON p.Artikel = a.ID
WHERE p.Datum <= @Suchdatum AND
      p.Datum = (SELECT max(preise.Datum) FROM preise WHERE preise.Artikel = a.ID AND preise.datum <= @Suchdatum)
Das sollte dir das gewünschte Ergebnis liefern. (hoffe ich :))

sir-archimedes 10. Jan 2006 11:30

Re: Artikelpreis zu gegenem Datum
 
:spin2: zwei doofe ein Gedanke - und du warst schneller...

tomsel 10. Jan 2006 11:36

Re: Artikelpreis zu gegenem Datum
 
:dancer2:

sir-archimedes 10. Jan 2006 11:39

Re: Artikelpreis zu gegenem Datum
 
Ha aber deins wird nicht funktionieren :-D

Hier nämlich greifst du nicht mehr auf die ursprüngliche Artikel-Tabelle zu:

SQL-Code:
AND p.Datum = MAX(SELECT p.Datum from artikel AS a, preise AS p where p.artikel = a.ID and p.Datum <= '01.01.2006')
Du suchst damit nämlich einfach nur das maximale datum für alle Artikel raus und nicht für dein einen ;-)

:dancer:

tomsel 10. Jan 2006 11:53

Re: Artikelpreis zu gegenem Datum
 
Zitat:

Zitat von dominik.boehm
Ha aber deins wird nicht funktionieren :-D

Hier nämlich greifst du nicht mehr auf die ursprüngliche Artikel-Tabelle zu:

SQL-Code:
AND p.Datum = MAX(SELECT p.Datum from artikel AS a, preise AS p where p.artikel = a.ID and p.Datum <= '01.01.2006')
Du suchst damit nämlich einfach nur das maximale datum für alle Artikel raus und nicht für dein einen ;-)

:dancer:

na ja, as soll ich sagen? Also wohl doch nur ein Doofer! :stupid:

Aber warum machst du zwei mal "<=@Suchdatum" :?:

sir-archimedes 10. Jan 2006 11:58

Re: Artikelpreis zu gegenem Datum
 
Stimmt kann man weglassen (das obere). Das untere brauchst du, damit du das richtige "maximale" Datum raussuchst.

Jelly 10. Jan 2006 12:40

Re: Artikelpreis zu gegenem Datum
 
Also irgendwie kommt das noch nicht ganz hin. Ich habs aber jetzt über eine temporäre View gelöst. Eure Ansätze waren schon alle richtig, nur muss ich noch ein weiteres Kriterium berücksichtigen.

Aber jetzt scheints auch bei mir zu klappen... Danke für die Mühe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz