Keeping only maximum date rows in a group
You can use ROW_NUMBER to rank your data according to date for each combination of id and question; then simply select the row with a ROW_NUMBER of 1:
WITH tbl_max_date AS (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY id, question ORDER BY date DESC) AS rn
  FROM tests2.o1.mc
)
SELECT *
FROM tbl_max_date
WHERE rn = 1

If you could have more than one row with the same maximum value per group, you can use RANK in place of ROW_NUMBER, as that will give all rows with the same value the same ranking. For example:
WITH tbl_max_date AS (
  SELECT *,
         RANK() OVER (PARTITION BY id, question ORDER BY date DESC) aS rn
  FROM tbl_src
)
SELECT *
FROM tbl_max_date
WHERE rn = 1