Below is the original table that I want to rank according to the column changes by Install_Status and Dates for each product.
Query:
;WITH CTE AS 
(
   SELECT  
       Product, Install_Status, Date_Inserted,
       DENSE_RANK() OVER (PARTITION BY Product ORDER BY rank) rank
   FROM
       (SELECT 
            Product, Install_Status, Date_Inserted,
            ROW_NUMBER() OVER (ORDER BY Product, Date_Inserted) -
               ROW_NUMBER() OVER (PARTITION BY Product, Install_Status ORDER BY Product, Date_Inserted ASC) AS rank
        FROM 
            [dbo].[Product_table]) t
)
SELECT * 
FROM CTE
ORDER BY Product, Date_Inserted;
This SQL query returns the following results:
However, I am not getting appropriate ranking for product A by date. My expected result is as below:
Advertisement
Answer
You seem to want to count the changes.  For this use lag() and a cumulative sum:
select t.*,
       sum(case when prev_install_status = install_status then 0 else 1 end) over
           (partition by product order by date_inserted) as rank
from (select t.*,
             lag(install_status) over (partition by product order by date_inserted) as prev_install_status
      from t
     ) t;


