How do window functions like ROW_NUMBER(), RANK(), and DENSE_RANK() differ, and when would you use each?