Subquery returns guest_id wise max row then JOIN with main table where matching guest_id and max_row not equal row_num then perform DELETE.
DELETE redshift
FROM redshift r
INNER JOIN (SELECT guest_id
, MAX(rownum) rownum
FROM redshift
GROUP BY guest_id) t
ON r.guest_id = t.guest_id
AND r.rownum != t.rownum
Please check from https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=47081e3517000949460932808ac9f09d
Delete duplicate records by using CTE
WITH t_cte AS (
SELECT *
, ROW_NUMBER() OVER (PARTITION BY guest_id ORDER BY rownum DESC) row_num
FROM redshift
)
DELETE redshift
FROM t_cte c
INNER JOIN redshift r
ON c.guest_id = r.guest_id
AND c.row_num > 1 AND c.rownum = r.rownum
Please check from url https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=90b7099ca779c0836b90278ae1b3635a