SELECT SUM(RS.AuthTaxRate) AS TaxRate
FROM (SELECT ta.TaxAuthority, tr.AuthTaxRate, tr.Effective AS EffectiveDate,
COALESCE(LEAD(tr.Effective, 1) OVER (PARTITION BY ta.TaxAuthority ORDER BY tr.Effective ASC), GETDATE()) AS NextRateDate
FROM #TaxRates tr LEFT JOIN
#TaxAreaAuthority ta
ON ta.TaxAuthority = tr.TaxAuthority
WHERE ta.TaxArea = 'city2'
GROUP BY ta.TaxAuthority , tr.AuthTaxRate , tr.Effective
) AS RS
WHERE '1994-11-01' BETWEEN RS.EffectiveDate AND RS.NextRateDate;
Вот скрипт создания:
create database taxes;
use taxes;
create table TaxAreaAuthority (TaxAuthority VARCHAR(10), TaxArea VARCHAR(10));
INSERT INTO TaxAreaAuthority VALUES('city1', 'city1'),
('city2', 'city2'),
('city3', 'city3'),
('county1', 'city1'),
('county1', 'city2'),
('county2', 'city3'),
('state1', 'city1'),
('state1', 'city2'),
('state1', 'city3');
create table TaxRates (TaxAuthority VARCHAR(10), Effective DATE, AuthTaxRate DECIMAL(2,1));
INSERT INTO TaxRates VALUES('city1', '1993-01-01', 1.0),
('city1', '1994-01-01', 1.5),
('city2', '1993-09-01', 1.5),
('city2', '1994-01-01', 2.0),
('city2', '1995-01-01', 2.5),
('city3', '1993-01-01', 1.9),
('city3', '1993-07-01', 2.3),
('county1', '1993-01-01', 2.3),
('county1', '1994-10-01', 2.5),
('county1', '1995-01-01', 2.7),
('county2', '1993-01-01', 2.4),
('county2', '1994-01-01', 2.7),
('county2', '1995-01-01', 2.8),
('state1', '1993-01-01', 0.5),
('state1', '1994-01-01', 0.8),
('state1', '1994-07-01', 0.9),
('state1', '1994-10-01', 1.1);