Get the Latest Currency Rate as at a date

Have you faced a situation where you want to have the latest currency rates available upto a particular date. Normally you may have to run sub queries but derived tables is the easiest way to do.

If Exists (Select * from Sysobjects Where Name ='CurrencyRates' and ObjectProperty(ID, 'IsUserTable')=1)
	Drop table CurrencyRates

If Exists (Select * from Sysobjects Where Name ='Currency' and ObjectProperty(ID, 'IsUserTable')=1)
Drop table Currency

Create Table Currency
(
Curr_Code varchar(4) NOT NULL Primary Key,
Curr_Name  varchar(60) NULL
)

GO 

Create Table CurrencyRates
(
Curr_Code varchar(4) NOT NULL ,
Curr_Date  Datetime NOT NULL,
Curr_Rate Decimal(18,4) NOT NULL,
Constraint PK_Key_CurrencyRates Primary KEY (Curr_Code, Curr_Date),
Constraint FK_Key Foreign Key (Curr_Code) 
References Currency(curr_Code) 
)

Insert Currency Values('LKRS', 'Sri Lankan Rupees')
Insert Currency Values('US $', 'U.S. Dollers')
Insert Currency Values('YEN', 'Japaneese Yen')
Insert Currency Values('UK £', 'U.K. Pounds')

Insert CurrencyRates Values('LKRS', '01 Jan 2000', 1.000)

Insert CurrencyRates Values('YEN', '17 Jan 2000', .6325)
Insert CurrencyRates Values('YEN', '15 Jan 2000', .6425)
Insert CurrencyRates Values('YEN', '20 Jan 2000', .6375)
Insert CurrencyRates Values('YEN', '02 Jan 2000', .6525)
Insert CurrencyRates Values('YEN', '14 Feb 2000', .6455)
Insert CurrencyRates Values('YEN', '13 Mar 2000', .7125)
Insert CurrencyRates Values('YEN', '30 Mar 2000', .6815)

Insert CurrencyRates Values('US $', '12 Jan 2000', 79.5)
Insert CurrencyRates Values('US $', '18 Jan 2000', 82.5)
Insert CurrencyRates Values('US $', '20 Jan 2000', 80.25)
Insert CurrencyRates Values('US $', '01 Jan 2000', 79.25)
Insert CurrencyRates Values('US $', '12 Feb 2000', 84.5)
Insert CurrencyRates Values('US $', '10 Mar 2000', 78.5)
Insert CurrencyRates Values('US $', '31 Mar 2000', 81.5)


Select A.Curr_code, c.Curr_Name, A.Curr_Date, B.Curr_Rate 
From (select Curr_Code, max(Curr_Date) Curr_Date 
	From CurrencyRates 	
	Where Curr_Date <= '10 Jan 2000' --Or any date specified 
	Group BY Curr_Code ) A, CurrencyRates B, Currency C
Where A.Curr_Code= B.Curr_Code and A.curr_Date= B.Curr_Date and A.Curr_Code= C.Curr_Code

Rate

Share

Share

Rate