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

Valor máximo de una fecha para registros que no se repitan!!!...

Estas en el tema de Valor máximo de una fecha para registros que no se repitan!!!... en el foro de SQL Server en Foros del Web. Hola!!! Pues tengo un problema con una consulta en SQL, quisiera que me arroje estos registros: fe_repro, rpe, cl_puest, puesto Siempre y cuando me arroje ...
  #1 (permalink)  
Antiguo 02/11/2011, 10:13
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Información Valor máximo de una fecha para registros que no se repitan!!!...

Hola!!! Pues tengo un problema con una consulta en SQL, quisiera que me arroje estos registros:

fe_repro, rpe, cl_puest, puesto

Siempre y cuando me arroje la fecha mayor para cada trabajador, es decir la fecha maxima para cada "rpe" que tenga en la tabla. Con esta consulta si me los arroja:

Código SQL:
Ver original
  1. SELECT MAX(b_contra.fe_repro), b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto FROM b_contra, b_traba1, c_puesto WHERE b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto ORDER BY b_traba1.rpe

Pero como en la tabla original tengo algunos registros repetidos con el rpe, el cl_puest y el puesto diferentes pues me arroja el valor máximo de la fecha para registros con "rpe" iguales ya que los registros de "cl_puest" y de "puest" son diferentes.

Pensé que con un group by para "rpe"y he aquí mi segunda pregunta la cual he tenido ya varios días y no la he podido aclarar: No es posible hacer en SQL un group by para solo un registro en especifico?? Ya que cuando ejecuto mi consulta en el entorno de asp.net me marca error si no incluyo en el group by los registros que tenga declarados en el select a menos que tenga una función agregada para el registro que declare en el select (max, min avg)...

Intente de igual manera con esta consulta, pero en ella solo me arroja la fecha más grande que encuentra en toda la tabla:

Código SQL:
Ver original
  1. SELECT b_contra.fe_repro, b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto FROM b_contra, b_traba1, c_puesto WHERE fe_repro=(SELECT MAX(fe_repro) FROM b_contra) AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_contra.fe_repro, b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto ORDER BY b_traba1.rpe

Intente con la función GREATEST pero me arroja un error en la página de asp que dice: ""'GREATEST'no es un nombre de función reconocido."" Este es como se ve una parte de la tabla que resulta de la consulta:

Columna1 rpe cl_puest puesto
04/10/2010 12:00:00 a.m. 07063 65331 AUXILIAR ADMINISTRATIVO
06/10/2009 12:00:00 a.m. 07068 65334 LINIERO LV
06/10/2009 12:00:00 a.m. 07081 65334 LINIERO LV
03/11/2009 12:00:00 a.m. 07081 66334 LINIERO ENCARGADO LV


Agradezco mucho su ayuda de antemano...

Última edición por stuart_david3; 02/11/2011 a las 10:46 Razón: Erroooor!!!...
  #2 (permalink)  
Antiguo 02/11/2011, 10:56
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

Bueno ahora que lo pienso... Existirá alguna función de agregado, o algo así en SQL que me deje el campo de un registro tal cual esta, esto para poder declarar los campos en mi select con esta función y así no tener que declararlos en el group by... Suena raro peor una función así me ayudaría bastante :p... Gracias de antemano...
  #3 (permalink)  
Antiguo 02/11/2011, 11:22
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

ya pensaste en hacer un subquery??

select * from tabla where fecha=(select max(fecha) from tabla group by fecha)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 02/11/2011, 12:43
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

Pues como dije al principio hice una subquery así:

Código SQL:
Ver original
  1. SELECT b_contra.fe_repro, b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto FROM b_contra, b_traba1, c_puesto WHERE fe_repro=(SELECT MAX(fe_repro) FROM b_contra) AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_contra.fe_repro, b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto ORDER BY b_traba1.rpe

Pero solo me arrojaba el valor de la fecha mayor, pero de todos los registros de la tabla ...

Pero al final decidí hacer esto:

Código SQL:
Ver original
  1. SELECT MAX(b_contra.fe_repro), b_traba1.rpe, MAX(c_puesto.puesto) FROM b_contra, b_traba1, c_puesto WHERE b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_traba1.rpe ORDER BY b_traba1.rpe

Y funciona gracias a Dios :)... Como no encontré una función agregada que me dejará los registros de mi select tal cual, pues puse esta que en realidad no afectaba mucho (en mi caso), esto para que no tuviera que agregar mi campo de c_puesto.puesto a mi GROUP BY... La única duda que me queda es la segunda:

"Cómo le hago para poner los registros que quiera en mi SELECT sin necesidad de declararlos en mi GROUP BY"... U_U... Gracias por tu respuesta Libras...
  #5 (permalink)  
Antiguo 02/11/2011, 13:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

en tu primer query te regresa el valor maximo de la tabla porque no le pones un group by para que no saque el valor maximo de la tabla.... si tienes un valor en tu select y tienes group by todos los campos del select deben de aparecer en el group by..

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 02/11/2011, 13:15
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

Pues ala consulta anterior me funciona, es decir, me genera los resultados que espero, pero no creo que sea la manera correcta.

Ahm, pues ahora hice la consulta como dijiste:

Código SQL:
Ver original
  1. SELECT b_contra.fe_repro, b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto FROM b_contra, b_traba1, c_puesto WHERE fe_repro=(SELECT MAX(fe_repro) FROM b_contra) AND b_traba1.rpe=b_contra.rpe AND c_puesto.cl_puest=b_contra.cl_puest GROUP BY b_contra.fe_repro, b_traba1.rpe, c_puesto.cl_puest, c_puesto.puesto ORDER BY b_traba1.rpe

Me genera el siguiente error:

La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.

Gracias nuevamente Libras, creo que de lo del group by me puedo ir olvidando :p...
  #7 (permalink)  
Antiguo 02/11/2011, 15:28
 
Fecha de Ingreso: noviembre-2011
Mensajes: 6
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

no cierres el paréntesis en WHERE fe_repro=(SELECT max(fe_repro) FROM b_contra) hazlo en ORDER BY b_traba1.rpe) e intenta a ver
  #8 (permalink)  
Antiguo 04/11/2011, 09:39
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Valor máximo de una fecha para registros que no se repitan!!!...

Pues, me marca error en la sintaxis cerca del AND:

"Sintaxis incorrecta cerca de la palabra clave 'AND'."

Gracias por tu respuesta...

Etiquetas: fecha, fechafin, sql, aspx
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 16:39.