У меня есть некоторые функции в PostgreSQL 9.0, которые возвращают результаты таблицы. Идея заключается в том, чтобы вернуть данные, как это было в определенное время, например.
CREATE FUNCTION person_asof(effective_time timestamp with time zone)
RETURNS SETOF person
...
CREATE FUNCTION pgroup_asof(effective_time timestamp with time zone)
RETURNS SETOF pgroup
...
Я могу запросить их почти так же, как если бы они были таблицами, с объединениями и всем другим
SELECT *
FROM pgroup_asof('2011-01-01') g
JOIN person_asof('2011-01-01') p
ON g.id = p.group_id
Это отлично работает, но есть ли уловка, которую я могу использовать, чтобы указать эффективное время только один раз?
Я пытался сделать что-то вроде этого:
SELECT *
FROM (SELECT '2010-04-12'::timestamp ts) effective,
pgroup_asof(effective.ts) g
JOIN person_asof(effective.ts) p
ON g.id = p.group_id
... но это не работает с ОШИБКА: выражение функции в FROM не может ссылаться на другие отношения того же уровня запроса , и помещение основного запроса в подзапрос также не помогает.