获取 SQL ANY 数组中每个元素的第一个匹配行
Get first matched row for each element in SQL ANY array
我有以下架构:
CREATE TABLE test (
key character(128),
value character(128),
timestamp int
);
三行:
key1 -> value1 -> 100
key2 -> value5 -> 200
key1 -> value15 -> 300
我想 运行 查询,我可以在其中获取给定键的键值对。所以,例如 运行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
我有以下架构:
CREATE TABLE test (
key character(128),
value character(128),
timestamp int
);
三行:
key1 -> value1 -> 100
key2 -> value5 -> 200
key1 -> value15 -> 300
我想 运行 查询,我可以在其中获取给定键的键值对。所以,例如 运行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