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
)