Your case
is just lingering after your query. The easiest way to write this is with a subquery:
select t.*,
(Case When (Minutes>5 And Minutes<=15)
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':15', 'dd-mon-yy hh24:mi')
When (Minutes>20 And Minutes<=30)
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':30', 'dd-mon-yy hh24:mi')
When (Minutes>35 And Minutes<=45)
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':45', 'dd-mon-yy hh24:mi')
When (Minutes>50 And Minutes<=60)
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':60', 'dd-mon-yy hh24:mi')
End)
from (Select Temperature, Extract(Minute From Reading_Time) As Minutes,
Extract(Hour From Reading_Time) As Hours, Cast(Reading_Time As Date) As Calendar_Date
From Weather_Data
Where Weather_Station = 'BDX'
) t
I don't fully understand your logic, because you have gaps. I would simply write:
(Case When Minutes <= 15
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':15', 'dd-mon-yy hh24:mi')
When Minutes <= 30
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':30', 'dd-mon-yy hh24:mi')
When Minutes <= 45
Then To_Timestamp(Calendar_Date &' '&'0'&Hours&':45', 'dd-mon-yy hh24:mi')
else To_Timestamp(Calendar_Date &' '&'0'&Hours&':60', 'dd-mon-yy hh24:mi')
End)