Is there a way to do the following query with joins instead of a sub query? I am using SQL Server 2014 and I want to eliminate having to use the following sub query so I can create an indexed view. 

The only thing similar to my problem is the greatest-n-per-group queries but I want all the values, instead of only the last measured factor ones.

This is my query:

SELECT
      eu.[Name],
      pp.[MonthDay] --date type,
      pp.[Value] * 
            (SELECT TOP 1 [Factor] FROM [em].[CO] co 
            WHERE co.[EUID] = eu.[Name] 
            AND co.[MonthDay] &lt;= pp.MonthDay 
            ORDER BY [MonthDay] DESC) AS [CO]
            --multiply by the last measured factor
            --I also want to remove the sub query
FROM em.[PPGenData] pp
JOIN em.[PPEUID] eu
ON eu.ID = pp.ID
this just trying to figure out your syntax:  

    SELECT eu.[Name],
           pp.[MonthDay] --date type,
           pp.[Value] *  ( SELECT TOP 1 [Factor] 
                             FROM [em].[CO] co 
                            WHERE co.[EUID] = eu.[Name] 
                              AND co.[MonthDay] &lt;= pp.MonthDay 
                            ORDER BY [MonthDay] DESC 
                         ) AS [CO] 
    FROM em.[PPGenData] pp
    JOIN em.[PPEUID] eu
             ON eu.ID = pp.ID


I think this will work:

select *  
(     
    SELECT eu.[Name],
           pp.[MonthDay] --date type,
           pp.[Value] * co.[Factor] as [ValueTimesFactor],
           row_number over(partition by co.[EUID] order by co.[MonthDay] DESC) as rn
      FROM em.[PPGenData] pp
      JOIN em.[PPEUID] eu
               ON eu.ID = pp.ID
      JOIN em.[CO] co 
               on co.[EUID] = eu.[Name] 
              AND co.[MonthDay] &lt;= pp.MonthDay 
)     tt 
where tt.rn = 1 


or

SELECT eu.[Name], pp.[MonthDay], pp.[Value],
       pp.[Value] * max(co.[Factor]) as [ValueTimesFactor],
  FROM em.[PPGenData] pp
  JOIN em.[PPEUID] eu
           ON eu.ID = pp.ID
  JOIN em.[CO] co 
           on co.[EUID] = eu.[Name] 
          AND co.[MonthDay] &lt;= pp.MonthDay  
 GROUP BY eu.[Name], pp.[MonthDay], pp.[Value]