Повторно использовать жестко закодированное значение в нескольких вызовах функций в запросе PostgreSQL - PullRequest
2 голосов
/ 14 июля 2011

У меня есть некоторые функции в 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 не может ссылаться на другие отношения того же уровня запроса , и помещение основного запроса в подзапрос также не помогает.

1 Ответ

3 голосов
/ 14 июля 2011

Это то, что я хотел сделать и в прошлом, но пока не похоже, что это возможно, но на горизонте может быть надежда .

...