CREATE TABLE quarters ([year] int, [quarter] int, PRIMARY KEY([year],[quarter]))
INSERT INTO quarters ([year], [quarter])
SELECT 2000 + number/4 [year], number%4 + 1 [quarter]
FROM master.dbo.spt_values
WHERE type = 'P' AND number BETWEEN 0 and 199
CREATE VIEW pricing WITH SCHEMABINDING AS
WITH pricerank AS
(SELECT q.[year], q.[quarter], p.productid, p.price,
p.[year] effectiveyear, p.[quarter] effectivequarter,
ROW_NUMBER() OVER (PARTITION BY p.productid,
q.[year], q.[quarter] ORDER BY p.[year] DESC, p.[quarter] DESC) AS ranking
FROM dbo.quarters q INNER JOIN dbo.product p
ON p.[year] = q.[year] AND p.[quarter] <= q.[quarter] OR p.[year] < q.[year]
WHERE q.[year] <= YEAR(GETDATE()))
SELECT [year], [quarter], productid, price
FROM pricerank
WHERE ranking = 1
CREATE UNIQUE CLUSTERED INDEX IX_pricing ON pricing([year],[quarter],productid)