If I've understood your problem correctly, I would use the following approach. Please note that the code is not tested as you did not supply data (I wrote the code "in the air"). You would be making it a lot simpler to get answers if you post DDL & Data with your questions.
-- First sequence all Statuses, on a per account basis
;WITH StatusSeq AS
(
SELECT Id
,Seq = ROW_NUMBER() OVER (PARTITION BY AccountID ORDER BY DateChanged)
,AccountId
,[Status]
,DateChanged
FROM dbo.AccountStatus
)
-- Second: Join the table to itself, so that on the right hand side
-- of the current row, you read the Status tha immediately followed
SELECT T1.AccountID
,T1.[Status]
,StartDT = T1.DateChanged
,EndDT = T2.DateChanged
-- I've chosen to show the date difference as days here,
-- you may want to choose something else
,Duration = DATEDIFF(DAY, T1.DateChanged, T2.DateChanged)
FROM StatusSeq T1
JOIN StatusSeq T2 ON T1.Seq = T2.Seq - 1