Ayuda con "DISTINCT ON"

From: "Zuleima Lara" <zlara(at)interactivedata(dot)com(dot)ve>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Ayuda con "DISTINCT ON"
Date: 2005-12-19 15:45:35
Message-ID: 001001c604b3$481635b0$2cee90c1@sky
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Buenos dias, tengo un problema, y me gustaria que me ayudaran. Es el 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';
Auxilio.......

Gracias!!!!

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2005-12-19 16:13:20 Re: Ayuda con "DISTINCT ON"
Previous Message Jose María Mencía 2005-12-19 15:03:13 Re: actualizar las ganancias