Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] MAX, GROUP BY y campos que no quiero agrupar

Estas en el tema de MAX, GROUP BY y campos que no quiero agrupar en el foro de SQL Server en Foros del Web. Hola amigos, Estoy intentando hacer una consulta que une varios campos de varias tablas pero que de una tabla en concreto con los campos 'AnioContrato' ...
  #1 (permalink)  
Antiguo 11/12/2014, 02:48
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 10 años
Puntos: 9
MAX, GROUP BY y campos que no quiero agrupar

Hola amigos,

Estoy intentando hacer una consulta que une varios campos de varias tablas pero que de una tabla en concreto con los campos 'AnioContrato' y 'FchInicio' me haga el MAX(FchInicio) y me muestre el AnioContrato de esa FchInicio.

El problema es que me pide meter el AnioContrato en el GROUP BY (con lo que no me descarta las FchInicio de otros años) o meterlo en una función de agregado (Lo que causa que el AnioContrato se "calcule" en vez de usarse el asociado a FchInicio)

Les dejo el código hasta ahora

Código SQL:
Ver original
  1. SELECT OfcContratosFormacion.IDContratoFormacion,
  2. OficinasISC.Nombre AS Asesoria,
  3. AC_Empresa.Nombre AS Empresa,
  4. AC_Alumno.Nombre AS Trabajador,
  5. MAX(A.FchInicio) AS FchInicio,
  6. B.AnioContrato
  7. FROM AC_Alumno
  8. INNER JOIN AC_Empresa
  9. ON AC_Alumno.IDACEmpresa = AC_Empresa.IDACEmpresa
  10. INNER JOIN OfcContratosFormacion
  11. ON AC_Alumno.IDACAlumno = OfcContratosFormacion.IDACAlumno
  12. AND AC_Empresa.IDACEmpresa = OfcContratosFormacion.IDACEmpresa
  13. INNER JOIN OfcContratosFormacion_DatosCtto A
  14. ON OfcContratosFormacion.IDContratoFormacion = A.IDContratoFormacion
  15. INNER JOIN OficinasISC
  16. ON AC_Empresa.IDOficina = OficinasISC.IDOficina
  17. AND OfcContratosFormacion.IDOficina = OficinasISC.IDOficina
  18. INNER JOIN OfcContratosFormacion_DatosCtto B
  19. ON A.FchInicio = B.FchInicio
  20. AND A.IDContratoFormacion = B.IDContratoFormacion
  21. WHERE A.FchInicio IS NOT NULL
  22. GROUP BY OfcContratosFormacion.IDContratoFormacion,
  23. OficinasISC.Nombre,
  24. AC_Empresa.Nombre,
  25. AC_Alumno.Nombre,
  26. B.AnioContrato

¿Alguna idea de que puedo hacer?

Última edición por gnzsoloyo; 11/12/2014 a las 08:58
  #2 (permalink)  
Antiguo 11/12/2014, 03:03
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 10 años
Puntos: 9
Respuesta: MAX, GROUP BY y campos que no quiero agrupar

Por si sirve de algo:

Cada IDContratoFormacion tiene tres AnioContrato creados y asociados con los campos por defecto a NULL hasta que se crea/renueva el Contrato. Puedo utilizar un COUNT(FchInicio) para saber cual es la fila que me interesa de cada GROUP BY (1º, 2º o 3º AnioContrato) pero no se si eso me servirá para sacar el Año en cuestión...
  #3 (permalink)  
Antiguo 11/12/2014, 08:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: MAX, GROUP BY y campos que no quiero agrupar

se podria hacer con algo asi:

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. LEFT JOIN (SELECT MAX(fecha) AS fecha,id FROM tabla2 GROUP BY id) AS t2 ON (t1.id=t2.id AND t1.fecha=t2.fecha)

nada mas aplica esa logica a tus datos y listo :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 11/12/2014, 09:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: MAX, GROUP BY y campos que no quiero agrupar

El único DBMS que yo conozco que permite agrupar por campos no declarados en el SELECT, o bien no incluirlos a todos los no afectados por funciones agregadas es MySQL.
Ni SQL Server, ni Oracle, PosgreSQL, ni ningún otro lo permite, así que la única solución es la que te plantea @Libras: usar subconsultas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 12/12/2014, 04:13
 
Fecha de Ingreso: diciembre-2014
Mensajes: 111
Antigüedad: 10 años
Puntos: 9
Respuesta: MAX, GROUP BY y campos que no quiero agrupar

¡Muchas gracias! Funciona perfecto.

Por si a alguién le interesa, mi consulta sería la del ejemplo pero con RIGHT, que cuándo lo intenté estaba muy espeso y no me salia lo que quería, de hecho hacía la consulta del revés y hasta que caí en cambiar left por right no os imagináis la de cambios absurdos que intente para hacerla funcionar...

Etiquetas: campos, group, independientes, max
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:39.