PostgreSQL - DISTINC ON

 
Vista:

DISTINC ON

Publicado por July (2 intervenciones) el 15/12/2005 17:45:58
Hola saludos a todos.. les tengo una pregunta a ver si me pueden ayudar.. Es lo siguiente:

El distinct on acepta como expresion parametros que son pasados en la llamada del procedimiento?.

Intento realizar una consulta donde utilizo la palabra reservada "distinct on" en conjunto con el "order by" y me lanza un error, es el siguiente:

ERROR: SELECT DISTINCT ON expressions must match initial ORDER BY expressions

El codigo que ejecuto es el siguiente:

CREATE OR REPLACE FUNCTION p(varchar,varchar)

RETURNS refcursor CALLED ON NULL INPUT LANGUAGE plpgsql AS'

BEGIN

SELECT distinct on

(
(SELECT estado FROM Minorista WHERE Min = $1),
(SELECT descripcion FROM Productos WHERE prov = $2)
)

(SELECT estado FROM Minorista WHERE Min = $1) as estado,
(SELECT capital FROM Minorista WHERE Min = $1) as capital,
(SELECT descripcion FROM Productos WHERE prov = $2) as descripcion,
(SELECT precio FROM Productos WHERE prov = $2) as precio,

FROM AlmacenMnBS WHERE Min = $1 AND prov = $2 AND fecha = ''10/25/05''

ORDER BY
(SELECT estado FROM Minorista WHERE Min = $1),
(SELECT descripcion FROM Productosv WHERE prov = $2),
fecha DESC, hora DESC;

END';

Pero si en el procedimiento utilizo valores fijos en las sentencias del distinct on, no existen problemas y funciona perfectamente. La sentencia me hace el filtro de las filas repetidas.

Ejemplo:

CREATE OR REPLACE FUNCTION p(varchar,varchar)

RETURNS refcursor CALLED ON NULL INPUT LANGUAGE plpgsql AS'

BEGIN

SELECT distinct on

(
(SELECT estado FROM Minorista WHERE Min = ''minorista 1''),
(SELECT descripcion FROM Productos WHERE prov = ''prov 1'')
)

(SELECT estado FROM Minorista WHERE Min = $1) as estado,
(SELECT capital FROM Minorista WHERE Min = $1) as capital,
(SELECT descripcion FROM Productos WHERE prov = $2) as descripcion,
(SELECT precio FROM Productos WHERE prov = $2) as precio,

FROM AlmacenMnBS WHERE Min = $1 AND prov = $2 AND fecha = ''10/25/05''

ORDER BY
(SELECT estado FROM Minorista WHERE Min = $1),
(SELECT descripcion FROM Productosv WHERE prov = $2),
fecha DESC, hora DESC;

END';
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder