You can use a window function such as the ranking function called ROW_NUMBER() to generate a numerical series within a grouping (PARTITION) of each Person ordered by the MeetingDate descending, like so:
SELECT ID, Person, MeetingDate
FROM
(
SELECT
ID,
Person,
MeetingDate,
ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
FROM MyTable
) AS Subquery
WHERE SortId = 1
You could also use a common table expression (CTE) instead of a subquery to neaten things up if you prefer:
WITH CTE_MyTable_Sorted AS
(
SELECT
ID,
Person,
MeetingDate,
ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC) AS SortId
FROM MyTable
)
SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1
The difference between using a subquery and a CTE is mostly just preference on organization / readability, but CTEs can be useful to keeping the code cleaner if you need to chain multiple together to do additional data manipulations (as opposed to multiple levels of subqueries).
Note, bbaird makes a very fair comment that if you have the case where the same Person has two different rows with the same exact MeetingDate then my previous queries above are non-deterministic and could return a different ID from within that same MeetingDate and Person grouping, each time the query is executed.
For example, if there are two rows in MyTable for Person A with MeetingDate 10/25/2021, one with ID 1 and the other with ID 2, then ordering on just the MeetingDate field is non-deterministic since it's the same MeetingDate for two different records for the same Person. In other words, which row comes first when the values being ordered on are exactly the same? In reality it's not possible to order one before the other, but in SQL Server, the answer is it's random.
To correct that, you would need to ensure you order by a unique expression. If your ID column is guaranteed to be UNIQUE then in the case where you have two rows with the same MeetingDate for the same Person, you could also add the ID to the end of the order by clause of the window function to ensure you always get deterministic results. If you want the largest (which generally is the latest - depending on how you're generating them) ID value when there are two rows for the same Person with the same MeetingDate then you would order by the ID field descending.
Here's an example of that using the CTE implementation from above:
WITH CTE_MyTable_Sorted AS
(
SELECT
ID,
Person,
MeetingDate,
ROW_NUMBER() OVER (PARTITION BY Person ORDER BY MeetingDate DESC, ID DESC) AS SortId
FROM MyTable
)
SELECT ID, Person, MeetingDate
FROM CTE_MyTable_Sorted
WHERE SortId = 1