WITH portfolio_symbols AS (
SELECT t.id AS ticker_id, t.symbol, t.name
FROM ticker_portfolio tp
JOIN ticker t ON t.id = tp.ticker_id
WHERE tp.portfolio_id = 13
),
momentum_ranked AS (
SELECT
mh.symbol,
mh.h_date,
mh.momentum,
RANK() OVER (
PARTITION BY mh.symbol, DATE_FORMAT(mh.h_date, '%Y-%m')
ORDER BY mh.h_date ASC
) AS date_rank
FROM momentum_history mh
WHERE mh.symbol IN (SELECT symbol FROM portfolio_symbols)
),
first_momentum_per_month AS (
SELECT *
FROM momentum_ranked
WHERE date_rank = 1
),
final_ranking AS (
SELECT
fmpm.h_date,
fmpm.symbol,
ps.name,
fmpm.momentum,
RANK() OVER (
PARTITION BY DATE_FORMAT(fmpm.h_date, '%Y-%m')
ORDER BY fmpm.momentum DESC
) AS momentum_rank
FROM first_momentum_per_month fmpm
JOIN portfolio_symbols ps ON ps.symbol = fmpm.symbol
)
SELECT *
FROM final_ranking
ORDER BY momentum_rank, h_date DESC;