【发布时间】:2022-01-03 01:30:03
【问题描述】:
我有很多表,其中许多都有timestamp 列。我可以得到一个包含时间戳列的每个表的列表:
SELECT table_name
FROM information_schema.columns
WHERE table_schema='my_schema' AND column_name='timestamp';
--------------
table_name
--------------
apples
bananas
sharks
lemons
我可以得到鲨鱼表中最高的时间戳如下
SELECT MAX(timestamp) FROM sharks;
-------------------------
max
-------------------------
2021-11-24 00:00:00.000
我想要一张这样的桌子
table_name | last_updated
-------------+-------------------------
apples | 2021-11-23 00:02:00.000
bananas | 2019-10-16 00:04:00.000
sharks | 2021-11-24 00:00:00.000
lemons | 1970-01-03 10:00:00.000
我怀疑这需要动态 SQL,所以我正在尝试类似
SELECT (
EXECUTE 'SELECT MAX(timestamp) FROM my_schema.' || table_name
) FROM (
SELECT table_name
FROM information_schema.columns
WHERE table_schema='my_schema' AND column_name='timestamp'
);
但似乎 EXECUTE 在子查询中不起作用。
性能不是特别关注的问题,只是产生预期的结果。
【问题讨论】:
-
见Dynamic Query。
EXECUTE需要用于整个查询。
标签: sql postgresql dynamic-sql information-schema