Thread:

From
JORGE MALDONADO
Date:
I have the following query:

SELECT

sem_clave,

to_char(secc_esp_media.sem_fechareg,'TMMon-DD-YYYY') as sem_fechareg,

sem_seccion,

sem_titulo,

sem_enca,

tmd_nombre,

tmd_archivo,

tmd_origen,

gen_nombre,

smd_nombre,

prm_urlyoutube,

prm_prmyoutube,

prm_urlsoundcloud,

prm_prmsoundcloud

FROM secc_esp_media

INNER JOIN cat_tit_media ON tmd_clave = sem_titulo

INNER JOIN cat_secc_media ON smd_clave = sem_seccion

INNER JOIN cat_generos ON gen_clave = tmd_genero

INNER JOIN parametros ON 1 = 1

WHERE

smd_nombre = 'SOMETHING' AND

sem_fipub <= 'SOME DATE' ORDER BY sem_fipub DESC, sem_ffpub DESC 


I thought it was working fine until I noticed I needed to include a DISTINCT clause as follows:

SELECT DISTINCT ON (sem_clave) ......(the rest of the query is exactly the same as above)

But, when I run it, I get a message telling me that I need an ORDER BY the field "sem_clave" which is the field in the DISTINCT clause. How can I solve this issue without affecting the ORDER BY it already has ?

Regards,
Jorge Maldonado

Re:

From
David Johnston
Date:
On Sep 22, 2012, at 20:15, JORGE MALDONADO <jorgemal1960@gmail.com> wrote:

I have the following query:

SELECT

sem_clave,

to_char(secc_esp_media.sem_fechareg,'TMMon-DD-YYYY') as sem_fechareg,

sem_seccion,

sem_titulo,

sem_enca,

tmd_nombre,

tmd_archivo,

tmd_origen,

gen_nombre,

smd_nombre,

prm_urlyoutube,

prm_prmyoutube,

prm_urlsoundcloud,

prm_prmsoundcloud

FROM secc_esp_media

INNER JOIN cat_tit_media ON tmd_clave = sem_titulo

INNER JOIN cat_secc_media ON smd_clave = sem_seccion

INNER JOIN cat_generos ON gen_clave = tmd_genero

INNER JOIN parametros ON 1 = 1

WHERE

smd_nombre = 'SOMETHING' AND

sem_fipub <= 'SOME DATE' ORDER BY sem_fipub DESC, sem_ffpub DESC 


I thought it was working fine until I noticed I needed to include a DISTINCT clause as follows:

SELECT DISTINCT ON (sem_clave) ......(the rest of the query is exactly the same as above)

But, when I run it, I get a message telling me that I need an ORDER BY the field "sem_clave" which is the field in the DISTINCT clause. How can I solve this issue without affecting the ORDER BY it already has ?

Regards,
Jorge Maldonado


Since you are forced to include the ON field(s) first in the ORDER BY if you want a different final sort order you will have to use either a sub-select or a CTE/WITH to execute the above query then in the outer/main query you can perform a second sort.

David J.