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

[SOLUCIONADO] extraer el último registro por fecha de la combinación de 2 campos

Estas en el tema de extraer el último registro por fecha de la combinación de 2 campos en el foro de SQL Server en Foros del Web. buenas noches, cómo sería posible extraer los últimos registros (por fecha) que cumplieran la condición: campo1 = valor1 y campo2 = valor2, y ordenados por ...
  #1 (permalink)  
Antiguo 31/01/2014, 15:26
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
extraer el último registro por fecha de la combinación de 2 campos

buenas noches,

cómo sería posible extraer los últimos registros (por fecha) que cumplieran la condición:
campo1 = valor1 y campo2 = valor2, y ordenados por fecha descendente.

la tabla, tiene valores que se repiten para campo1 y campo2:

n campo1 campo2 campo3 campo4 fecha
1 usuario1 empresa2 ........... ........... .......
2 usuario2 empresa2 ........... ........... .......
3 usuario1 empresa2 ........... ........... .......
4 usuario2 empresa1 ........... ........... .......
5 usuario1 empresa1 ........... ........... .......
6 usuario1 empresa2 ........... ........... .......
7 usuario1 empresa1 ........... ........... .......
8 usuario1 empresa3 ........... ........... .......
9 usuario1 empresa3 ........... ........... .......

debería ser capaz de extraer los registros (suponiendo que estos registros están ordenados por fecha ascendente), y además ordenados por fecha descendente.

para el par usuario1 y empresa1 el registro n7
para el par usuario1 y empresa2 el registro n6
para el par usuario1 y empresa3 el registro n9

es decir el último registro por fecha de cada par usuario y empresa, y que a su vez estos aparecieran ordenados por fecha descendente.

un saludo,
josé carlos.
  #2 (permalink)  
Antiguo 31/01/2014, 15:44
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: extraer el último registro por fecha de la combinación de 2 campos

ya hay muchos temas con esta pregunta puedes hacerlo de esta manera:


Código SQL:
Ver original
  1. SELECT usuario,empresa,fecha FROM tabla WHERE
  2. usuario + empresa + fecha IN (
  3. SELECT usuario + empresa + MAX(fecha) FROM tabla GROUP BY usuario,empresa)

con esto te dara el ultimo usuario por empresa :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 03/02/2014, 20:30
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

Libras pero estas asumiendo que los campos: usuario, empresa y fecha son STRINGS.

Otra solución sería:

Código SQL:
Ver original
  1. SELECT usuario,empresa,fecha
  2. FROM tabla
  3. WHERE
  4. (usuario,empresa,fecha)
  5. IN (SELECT usuario,empresa,MAX(fecha)
  6.    FROM tabla
  7.    GROUP BY usuario,empresa)

La concatenación no la veo necesaria cuandio se trabajan con columnas que tienen distintos tipos de datos

Saludos!!

damimg
  #4 (permalink)  
Antiguo 03/02/2014, 21:14
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: extraer el último registro por fecha de la combinación de 2 campos

amigo aqui se asume que conviertes todos tus valores a string para concatenarlos porque no lo puse asi, porque me dio flojera poner todo el codigo...
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 04/02/2014, 07:16
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

Cita:
Iniciado por Libras Ver Mensaje
amigo aqui se asume que conviertes todos tus valores a string para concatenarlos porque no lo puse asi, porque me dio flojera poner todo el codigo...
El código que compartí lo ves válido?
  #6 (permalink)  
Antiguo 04/02/2014, 10:57
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: extraer el último registro por fecha de la combinación de 2 campos

nunca habia visto ese modo de usar el IN, hice una prueba y me dice que es una sintaxis no valida, no probaste tu codigo???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 04/02/2014, 11:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

Es una forma válida en MySQL y Oracle, pero no parece ser correcta para SQL Server.
Hay que tener cuidado con migrar sintaxis entre diferentes DBMS, No todo funciona en todo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 04/02/2014, 12:52
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es una forma válida en MySQL y Oracle, pero no parece ser correcta para SQL Server.
Hay que tener cuidado con migrar sintaxis entre diferentes DBMS, No todo funciona en todo.
Me encontré trabajando con Oracle y lo pobré en ese DBMS.

Tendría que existir una forma de poder hacerlo en SQL Server.

Alguno de ustedes la conoce?

Saludos
  #9 (permalink)  
Antiguo 04/02/2014, 13:05
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: extraer el último registro por fecha de la combinación de 2 campos

de esa manera no, lo que se puede hacer es concatenando los valores......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 05/02/2014, 08:07
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

Cita:
Iniciado por Libras Ver Mensaje
de esa manera no, lo que se puede hacer es concatenando los valores......
Gracias Libras de todos modos

Saludos
  #11 (permalink)  
Antiguo 12/02/2014, 06:28
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

buenos días,

para mssql server que es sobre la que se está ejecutando la consulta he tenido que incluir la conversión de la columna fecha que es datetime como varchar, las columnas usuario y empresa también son varchar:

Código SQL:
Ver original
  1. SELECT     usuario, empresa, fecha
  2. FROM        tabla
  3. WHERE     ((usuario + empresa + CONVERT(VARCHAR, fecha, 121)) IN
  4.                           (SELECT     usuario + empresa + MAX(CONVERT(VARCHAR, fecha, 121))
  5.                             FROM       tabla
  6.                             GROUP BY usuario, empresa))

gracias Libras,

un saludo,
josé carlos.

Última edición por gnzsoloyo; 12/02/2014 a las 06:35
  #12 (permalink)  
Antiguo 12/02/2014, 17:16
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

En lugar del IN, porque no hacen el JOIN ??

Seguramente esa forma será SUMAMENTE LLLLLLLEEEEEENNNNNNNNTAAAAAAAAAAAAA
__________________
MCTS Isaias Islas
  #13 (permalink)  
Antiguo 13/02/2014, 11:33
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

buenas tardes,

con join ¿cómo quedaría la consulta?

un saludo,
josé carlos.
  #14 (permalink)  
Antiguo 13/02/2014, 12:28
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: extraer el último registro por fecha de la combinación de 2 campos

que hagas algo asi:

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT     usuario, empresa, fecha, ((usuario + empresa + CONVERT(VARCHAR, fecha, 121)) AS campo
  3. FROM        tabla
  4. ) t1
  5. INNER JOIN (SELECT     usuario + empresa + MAX(CONVERT(VARCHAR, fecha, 121)) AS campo
  6.                             FROM       tabla
  7.                             GROUP BY usuario, empresa)) AS t2 ON (t1.campo=t2.campo)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #15 (permalink)  
Antiguo 13/02/2014, 14:11
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 8 meses
Puntos: 2
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

hola,

¿qué diferencia de rendimiento habría?

Código MsSql:
Ver original
  1. SELECT *
  2. FROM
  3.  (SELECT usuario, empresa, fecha, (usuario + empresa + CONVERT(VARCHAR, fecha, 121)) AS campo1 FROM tabla) t1
  4. INNER JOIN
  5.  (SELECT usuario + empersa + MAX(CONVERT(VARCHAR, fecha, 121)) AS campo2 FROM tabla GROUP BY usuario, empresa) AS t2
  6. ON t1.campo1 = t2.campo2)

un saludo,
josé carlos.

Última edición por evoarte; 13/02/2014 a las 14:14 Razón: más claridad
  #16 (permalink)  
Antiguo 13/02/2014, 14:53
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: extraer el último registro por fecha de la combinación de 2 campos

de que con el In y al estar haciendo un convert, no estarias utilizando los indices de la tabla, ademas de que es mas recomendado hacer un exists que un in, cuando vas a comparar muchos datos.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 13/02/2014, 16:28
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: extraer el último registro por fecha de la combinación de 2 campos

¿Porque?, jajajaja (no es broma)
__________________
MCTS Isaias Islas
  #18 (permalink)  
Antiguo 13/02/2014, 16:31
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: extraer el último registro por fecha de la combinación de 2 campos

Cita:
Iniciado por iislas Ver Mensaje
¿Porque?, jajajaja (no es broma)
Porque.................si jajajajajaja
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: campo, campos, combinación, fecha, registro, registros, tabla
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 02:58.