This is a classic spreadsheet problem that looks like a lookup failure, but it's actually a design problem. Gorphon has two records for key 1, one for Bobby, one for Timmy, and XLOOKUP is dutifully returning the first match, which is Bobby. That is not a bug in the formula; it is a mismatch between what the function was built for and what the question actually asks. The real question is not "Who used this key?" but rather "Who used this key most recently?"
The practical fix is to stop trying to force XLOOKUP into a job it cannot do alone. XLOOKUP returns the first match in a range, full stop. When you have multiple rows for the same key, the first match is rarely the most recent one. Gorphon already found the correct approach: using MAX in a separate cell to retrieve the latest date from the Date Issued column. The missing link is combining those two pieces into a single result. A more reliable method is to use an array formula or a combination of INDEX and MATCH, where MATCH looks for both the key number and the maximum date in one pass. That returns the exact row where the key number matches and the date is the latest. It is not a workaround; it is the proper structure for this kind of conditional retrieval.
But the larger point matters more. Gorphon is doing what every competent spreadsheet user eventually does, trying to make a tool designed for static tables behave like a temporal query system. Traditional spreadsheets were not built to answer "what is the latest state for this item across a history of events." They are organized by rows and columns, not by time series. That means users spend their energy inventing formula gymnastics instead of focusing on the data itself. We think that is a waste of talent. The moment a user needs to find the most recent occurrence of something, the spreadsheet has already pushed them into workaround territory. An AI-native approach would let you ask that question plainly: "For key 1, who last took it out?" without nesting functions or worrying about match order.
So the concrete takeaway is this: if you are writing nested lookups to get a simple time-based answer, your tool is asking you to solve a problem it should solve automatically. The best formula for Gorphon's immediate need is a combination of INDEX, MATCH, and MAX, but the real upgrade is using a system that treats time as a first-class dimension. Track the key, track the person, track the date, and let the software handle the order. That is not aspirational, it is the difference between fighting your tool and letting it work for you.