获取 SQL ANY 数组中每个元素的第一个匹配行

Get first matched row for each element in SQL ANY array

我有以下架构:

CREATE TABLE test (
    key character(128),
    value character(128),
    timestamp int
);

三行:

我想 运行 查询,我可以在其中获取给定键的键值对。所以,例如 运行ning

SELECT key, value
FROM test
WHERE key = ANY(array['key1', 'key2'])
ORDER by timestamp DESC
LIMIT 1
    

会return

key1, value15
key2, value5

现在,上面的查询 return 只是最近的元素。我应该如何将其修改为 return 'any' 数组中每个项目的最新元素?谢谢!

我认为最简单的方法是取消嵌套数组,然后使用 distinct on:

select distinct on (a.key) a.key, t.value
from test t
inner join unnest(array['key1', 'key2']) a(key) on a.key = t.key
order by a.key, t.timestamp desc