Posts
231
Comments
64
Trackbacks
4
Thursday, May 08, 2008
SQL-Aufgabe: aktuelle Preise ermitteln

Zu einem Artikel gibt es zu verschiedenen Monaten verschiedene Preise. Die Artikeldaten stehen in der Tabelle Artikel, die verschiedenen Preise in der Tabelle Artikelpreise.

Mit dem folgenden Select lassen sich die heute gültigen Preise ermitteln:

DECLARE @PriceDate AS DATETIME
SET @PriceDate = GETDATE()

SELECT * FROM Artikel
INNER JOIN Artikelpreise ON Artikelpreise.ArtikelGUID=Artikel.GUID
WHERE

(
-- Get the current Entry
Artikelpreise.ValidFrom=
  (CASE WHEN
    (SELECT TOP 1 ValidFrom FROM Artikelpreise
    WHERE ValidFrom<=@PriceDate
    AND Artikelpreise.ArtikelGUID=Artikel.GUID
    ORDER BY ValidFrom DESC) IS NULL
THEN
-- There is only (maybe) a valid Price in the Future. Take it.
    (SELECT TOP 1 ValidFrom FROM Artikelpreise
    WHERE Artikelpreise.ArtikelGUID=Artikel.GUID
    ORDER BY ValidFrom DESC)
ELSE
-- Take the current found Price
    (SELECT TOP 1 ValidFrom FROM Artikelpreise
    WHERE ValidFrom<=@PriceDate
    AND Artikelpreise.ArtikelGUID=Artikel.GUID
    ORDER BY ValidFrom DESC)
END)
-- or no Price at all has been found
OR Artikelpreise.ValidFrom IS NULL
)

posted @ Thursday, May 08, 2008 8:41 AM | Feedback (0)