![]() |
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. |
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:
sollte doch funktionieren oder nicht?
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' aeno |
Re: Artikelpreis zu gegenem Datum
Zitat:
SQL-Code:
Das sollen alle Artikel mit ihrem zum 01.01.2006 gültigen Preis sein, wenn ich das nicht total verkorkt hab.
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') |
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:
Das sollte dir das gewünschte Ergebnis liefern. (hoffe ich :))
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) |
Re: Artikelpreis zu gegenem Datum
:spin2: zwei doofe ein Gedanke - und du warst schneller...
|
Re: Artikelpreis zu gegenem Datum
:dancer2:
|
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:
Du suchst damit nämlich einfach nur das maximale datum für alle Artikel raus und nicht für dein einen ;-)
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')
:dancer: |
Re: Artikelpreis zu gegenem Datum
Zitat:
Aber warum machst du zwei mal "<=@Suchdatum" :?: |
Re: Artikelpreis zu gegenem Datum
Stimmt kann man weglassen (das obere). Das untere brauchst du, damit du das richtige "maximale" Datum raussuchst.
|
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 06:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz