create table #Rates( Country varchar(3), FromDate datetime, ToDate datetime, CostPerSec numeric(5,2))create table #Records( Country varchar(3), Date datetime, Duration int)insert #Ratesselect 'USA', '2012-10-10 00:00:00.000', '2012-10-14 23:59:59.000', 0.01 union allselect 'USA', '2012-10-15 00:00:00.000', NULL, 0.02 union allselect 'UK', '2012-10-13 00:00:00.000', NULL, 0.02insert #Recordsselect 'USA', '2012-10-14 10:00:00.000', 10 union allselect 'USA', '2012-10-15 20:00:00.000', 10 union allselect 'UK', '2012-10-13 20:00:00.000', 10select * from #Ratesselect * from #Recordsdrop table #Ratesdrop table #Records
select r.Country, SUM(CostPerSec)from #Rates rjoin #Records rc on rc.Date >= r.FromDate and rc.Date <= isnull(r.ToDate, rc.Date) and r.Country = rc.Countrygroup by r.Country
declare @FromDate datetime = '20121013', @ToDate datetime = '20121015'select r.Country, SUM(CostPerSec)from #Rates rjoin #Records rc on rc.Date >= @FromDate and rc.Date <= isnull(@ToDate, rc.Date) and r.Country = rc.Countrygroup by r.Country
DECLARE @FromDate datetime = '20121013', @ToDate datetime = '20121015'SELECT rc.Country, SUM(r.CostPerSec*rc.Duration)FROM #Rates rJOIN #Records rc ON rc.Date >= r.FromDate AND rc.Date <= isnull(r.ToDate, rc.Date) AND r.Country = rc.CountryWHERE rc.Date >= @FromDate AND rc.Date <=@ToDateGROUP BY rc.Country
DECLARE @FromDate datetime = '20121013', @ToDate datetime = '20121015'SELECT rc.Country, SUM(r.CostPerSec*rc.Duration)FROM #Rates rJOIN #Records rc ON rc.Date >= r.FromDate AND rc.Date <= isnull(r.ToDate, rc.Date) AND r.Country = rc.CountryWHERE rc.Date >= @FromDate AND rc.Date <=@ToDateGROUP BY r.Country