Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Condición para un SELECT

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Condición para un SELECT Responder citando

Tengo este query en FB 2.5 a partir de una vista:
Código:
SELECT DISTINCT Codigo, EXTRACT(MONTH FROM MAX(Fecha)), Situacion, Periodo
FROM Rc03
WHERE (Fecha < :Fecha OR Fecha IS NULL)
AND Periodo = 'Anual'
GROUP BY 1, 3, 4 ORDER BY 4, 3, 2

Evidentemente así me devolverá filas en las que la segunda columna valga 1, 2, 3... o NULL si es que no hay fecha. Ahora necesito, a partir de esa misma consulta, sacar solamente aquellos registros correspondientes al mes 2. Había pensado algo así:
Código:
SELECT DISTINCT Codigo, EXTRACT(MONTH FROM MAX(Fecha)), Situacion, Periodo
FROM Rc03
WHERE (Fecha < :Fecha OR Fecha IS NULL)
AND Periodo = 'Anual'
AND EXTRACT(MONTH FROM MAX(Fecha)) = 2
GROUP BY 1, 3, 4 ORDER BY 4, 3, 2

Sin embargo, y esto tampoco lo sabía porque no se me había dado nunca una situación parecida, he decubierto que dentro de un WHERE no puede ponerse campos agregados como el MAX(Fecha). Según el mesaje de error de FB debería usar la claúsula HAVING pero, sinceramente, por más que leo sobre ella no acabo de comprender como funciona; ¿debería ser algo así?
Código:
SELECT DISTINCT Codigo, EXTRACT(MONTH FROM MAX(Fecha)), Situacion, Periodo
FROM Rc03
WHERE (Fecha < :Fecha OR Fecha IS NULL)
AND Periodo = 'Anual'
GROUP BY 1, 3, 4
HAVING EXTRACT(MONTH FROM MAX(Fecha)) = 2
ORDER BY 4, 3, 2

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Tienes que quitar MAX ya que estás restringiendo los RESULTADOS condicionados por la agrupación MAX()
Código:

SELECT DISTINCT Codigo, EXTRACT(MONTH FROM Fecha), Situacion, Periodo
FROM Rc03
WHERE (Fecha < :Fecha OR Fecha IS NULL)
AND Periodo = 'Anual'
AND EXTRACT(MONTH FROM Fecha) = 2
GROUP BY 1, 3, 4 ORDER BY 4, 3, 2

_________________
Muchos hombres no se equivocan jamás porque no se proponen nada razonable.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.