Does this help?
Basically, the idea is to have another column that counts the weeks between two dates.
--= test data
DECLARE @t table(theDate smalldatetime, FinYear smallint, FinPer tinyint, FinWeek tinyint) ;
set nocount on ;
insert @t values('2009-12-27', 2010, 1, 1) ;
insert @t values('2009-12-28', 2010, 1, 1) ;
insert @t values('2009-12-29', 2010, 1, 1) ;
insert @t values('2010-01-19', 2010, 1, 4) ;
insert @t values('2010-01-20', 2010, 1, 4) ;
insert @t values('2010-02-18', 2010, 2, 8) ;
insert @t values('2010-02-19', 2010, 2, 8) ;
insert @t values('2010-03-25', 2010, 3, 13) ;
insert @t values('2010-03-26', 2010, 3, 13) ;
insert @t values('2010-04-30', 2010, 4, 18) ;
insert @t values('2010-05-01', 2010, 4, 18) ;
insert @t values('2010-05-28', 2010, 5, 22) ;
insert @t values('2010-05-29', 2010, 5, 22) ;
insert @t values('2010-06-28', 2010, 7, 27) ;
insert @t values('2010-06-29', 2010, 7, 27) ;
insert @t values('2010-08-27', 2010, 8, 35) ;
insert @t values('2010-08-28', 2010, 8, 35) ;
insert @t values('2010-09-15', 2010, 9, 38) ;
insert @t values('2010-09-16', 2010, 9, 38) ;
insert @t values('2010-09-29', 2010, 10, 40) ;
insert @t values('2010-09-30', 2010, 10, 40) ;
insert @t values('2010-12-16', 2010, 12, 51) ;
insert @t values('2010-12-17', 2010, 12, 51) ;
insert @t values('2010-12-18', 2010, 12, 51) ;
insert @t values('2010-12-19', 2010, 12, 52) ;
insert @t values('2010-12-20', 2010, 12, 52) ;
insert @t values('2010-12-26', 2011, 1, 1) ;
insert @t values('2010-12-27', 2011, 1, 1) ;
insert @t values('2010-12-28', 2011, 1, 1) ;
insert @t values('2011-03-03', 2011, 3, 10) ;
insert @t values('2011-04-03', 2011, 4, 15) ;
insert @t values('2011-05-05', 2011, 5, 19) ;
insert @t values('2011-05-28', 2011, 5, 22) ;
insert @t values('2011-06-18', 2011, 6, 25) ;
insert @t values('2011-06-19', 2011, 6, 26) ;
insert @t values('2011-07-10', 2011, 7, 29) ;
insert @t values('2011-08-08', 2011, 8, 33) ;
insert @t values('2011-08-29', 2011, 9, 36) ;
insert @t values('2011-10-08', 2011, 10, 41) ;
insert @t values('2011-11-21', 2011, 11, 48) ;
insert @t values('2011-11-22', 2011, 11, 48) ;
insert @t values('2011-12-27', 2011, 12, 53) ;
insert @t values('2011-12-28', 2011, 12, 53) ;
insert @t values('2011-12-29', 2011, 12, 53) ;
insert @t values('2011-12-30', 2011, 12, 53) ;
insert @t values('2011-12-31', 2011, 12, 53) ;
--= sample for dates 2010-12-18 and 2011-12-31 -
--= unfortunately the answer is wrong because all dates are not present between, but the idea works
select max(WeekNum) from (select DENSE_RANK() OVER(ORDER BY FinYear,FinPer,FinWeek) as WeekNum
from @t
where theDate BETWEEN '2010-12-18' AND '2011-12-31') as a
You could add a column like this to the table itself and just pull the difference between the two values by date to save some io cost.
MM
select geometry::STGeomFromWKB(0x0106000000020000000103000000010000000B0000001000000000000840000000000000003DD8CCCCCCCCCC0840000000000000003DD8CCCCCCCCCC08408014AE47E17AFC3F040000000000104000CDCCCCCCCCEC3F9C999999999913408014AE47E17AFC3F9C99999999991340000000000000003D0000000000001440000000000000003D000000000000144000000000000000400400000000001040000000000000F03F100000000000084000000000000000401000000000000840000000000000003D0103000000010000000B000000000000000000143D000000000000003D009E99999999B93F000000000000003D009E99999999B93F8014AE47E17AFC3F400000000000F03F00CDCCCCCCCCEC3FA06666666666FE3F8014AE47E17AFC3FA06666666666FE3F000000000000003D1800000000000040000000000000003D18000000000000400000000000000040400000000000F03F000000000000F03F000000000000143D0000000000000040000000000000143D000000000000003D, 0);