Функции в postgres SQL - PullRequest
1 голос
/ 11 марта 2020

У меня есть этот запрос, который работает, но мне нужна помощь, чтобы поместить его в функцию и сделать переменную даты. Я хотел бы получить некоторую помощь, так как я не так хорош в фукциях.

SELECT equipo.nombre
    ,e3.nombre
    ,e2.nombre
    ,e1.nombre
    ,tpe.tiempo_inicio::TIMESTAMP (0) AS "Tiempoini"
    ,LEAD(tpe.tiempo_inicio) OVER (
        ORDER BY equipo.id, tpe.tiempo_inicio ASC
        )::TIMESTAMP (0) AS "tiempofin"
    ,LEAD(tpe.tiempo_inicio::TIMESTAMP (0)) OVER (
        ORDER BY equipo.id
        ) - tpe.tiempo_inicio::TIMESTAMP (0) AS "diferencia"
FROM tp_estados tpe
LEFT JOIN ts_equipos equipo ON tpe.id_equipo = equipo.id
LEFT JOIN ts_detal_estado e1 ON tpe.id_detal_estado = e1.id
LEFT JOIN ts_detal_estado e2 ON e1.id_tipo_estad = e2.id
LEFT JOIN ts_detal_estado e3 ON e2.id_tipo_estad = e3.id
WHERE equipo.id = 356
AND tpe.tiem_creac BETWEEN '2020-01-22 11:14:02' AND '2020-01-22 12:30:08' //this dates have to be variable
AND e1.isestado = true

1 Ответ

0 голосов
/ 12 марта 2020

Измените function_name на что-то значимое и определите возвращаемые столбцы.

CREATE FUNCTION function_name(start_date timestamp, end_date timestamp)
  RETURNS table(...) //DEFINE YOUR COLUMNS
AS $$
SELECT equipo.nombre
    ,e3.nombre
    ,e2.nombre
    ,e1.nombre
    ,tpe.tiempo_inicio::TIMESTAMP (0) AS "Tiempoini"
    ,LEAD(tpe.tiempo_inicio) OVER (
        ORDER BY equipo.id
            ,tpe.tiempo_inicio ASC
        )::TIMESTAMP (0) AS "tiempofin"
    ,lEAD(tpe.tiempo_inicio::TIMESTAMP (0)) OVER (
        ORDER BY equipo.id
        ) - tpe.tiempo_inicio::TIMESTAMP (0) AS "diferencia"
FROM tp_estados tpe
LEFT JOIN ts_equipos equipo ON tpe.id_equipo = equipo.id
LEFT JOIN ts_detal_estado e1 ON tpe.id_detal_estado = e1.id
LEFT JOIN ts_detal_estado e2 ON e1.id_tipo_estad = e2.id
LEFT JOIN ts_detal_estado e3 ON e2.id_tipo_estad = e3.id
WHERE equipo.id = 356
    AND tpe.tiem_creac BETWEEN start_date 
        AND end_date //this dates have to be variable
    AND e1.isestado = true
$$ LANGUAGE SQL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...