SQL 2008 :
; WITH T (Company_Id, Billing_Failure_Date , RowNum )
AS
(
SELECT 101, '2017-01-12', 1
UNION ALL
SELECT 101, '2017-02-22', 2
UNION ALL
SELECT 118, '2017-03-23', 1
UNION ALL
SELECT 119, '2017-04-18', 1
UNION ALL
SELECT 123, '2017-01-12', 1
UNION ALL
SELECT 123, '2017-01-15', 2
UNION ALL
SELECT 123, '2017-01-22', 3
UNION ALL
SELECT 501, '2017-01-30', 1
UNION ALL
SELECT 501, '2017-02-02', 2
)
, W AS
(
SELECT * , (SELECT MAX(Ottr.Billing_Failure_Date) FROM T Ottr WHERE Ottr.Company_Id = Innr.Company_Id AND Ottr.RowNum < Innr.RowNum AND Ottr.Billing_Failure_Date < Innr.Billing_Failure_Date) Prev_Billing_Failure_Date
FROM T Innr
)
SELECT Company_Id, Billing_Failure_Date , RowNum , ISNULL(DATEDIFF(DAY,Prev_Billing_Failure_Date, Billing_Failure_Date),0) [Days]
FROM W