;with aClimate as(
select 'Banglore' as [city], 'R' as [status], '2013-08-09' [curDate] union all
select 'Banglore' as [city], 'R' as [status], '2013-08-10' [curDate] union all
select 'Banglore' as [city], 'R' as [status], '2013-08-12' [curDate] union all
select 'Banglore' as [city], 'S' as [status], '2013-08-15' [curDate] )
select c1.city,c1.[status],c3.[Curdate]
from aClimate as c1
outer apply
(select top 1 city,[status],[curDate]
from aClimate as c2
where c1.city=c2.city
and c2.[Curdate]>c1.[Curdate]
and c1.[status]<>c2.[status]
order by c2.[Curdate] asc) as c2
outer apply
(select top 1 [curDate]
from aClimate as c3
where c1.city=c3.city
and c3.[Curdate]<c2.[Curdate]
and c3.[status]<>c2.[status]
order by c3.[Curdate] desc) as c3
group by c1.city,c1.[status],c3.[Curdate]
having count(*)>2

SELECT
City,
MAX(CurDate) AS [Date]
FROM
(
SELECT
City,
Status,
CurDate,
LAG(Status, 1) OVER (PARTITION BY City ORDER BY CurDate) AS PrevStatus,
LAG(Status, 2) OVER (PARTITION BY City ORDER BY CurDate) AS PrevPrevStatus
FROM
@Climate
) AS T
WHERE
Status = PrevStatus
AND PrevStatus = PrevPrevStatus
GROUP BY
City