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

[SOLUCIONADO] Traer ultimo dato de cada "Categoria"

Estas en el tema de Traer ultimo dato de cada "Categoria" en el foro de Bases de Datos General en Foros del Web. Buenas Tardes Amigos de Foros del Web; Muchas gracias de antemano con la valiosa ayuda que me puedan brindar con lo siguiente: Resulta que tengo ...
  #1 (permalink)  
Antiguo 04/02/2015, 15:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 12 años, 10 meses
Puntos: 1
Pregunta Traer ultimo dato de cada "Categoria"

Buenas Tardes Amigos de Foros del Web;

Muchas gracias de antemano con la valiosa ayuda que me puedan brindar con lo siguiente:

Resulta que tengo la siguiente estructura de DB...


Código:
ID	Cat	ValorA	ValorB	ValorC	fecha
1	3	2	1	1	2014/10/31
2	4	3	1	1	2014/10/31
3	5	4	9	9	2014/10/31
4	6	3	8	8	2014/10/31
5	8	5	1	1	2014/10/31
6	9	2	1	1	2014/10/31
13	3	2	2	2	2015/02/04
14	4	3	3	3	2015/02/04
15	5	4	4	4	2015/02/04
16	6	5	5	5	2015/02/04
17	8	6	6	6	2015/02/04
18	9	7	7	7	2015/02/04
La idea es traer el ultimo valor de cada categoría de los valores A B y C

Código:
ID	Cat	ValorA	ValorB	ValorC	fecha
13	3	2	2	2	2015-02-04
14	4	3	3	3	2015-02-04
15	5	4	4	4	2015-02-04
16	6	5	5	5	2015-02-04
17	8	6	6	6	2015-02-04
18	9	7	7	7	2015-02-04
he Intentado con:
Código SQL:
Ver original
  1. SELECT MAX(ID) AS ID * FROM TABLA1

y
Código SQL:
Ver original
  1. SELECT TOP 1 * FROM TABLA1,

pero los resultados no son los esperados, pensaba realizar, una consulta anidada con el max ID de la tabla, pero tengo la plena seguridad que debe hacerse de una manera, mucho mas sencilla, y como supondrán no se cual es esa manera, ya que la función LAST y LAST_VALUE, al parecer no pertenecen al SQL SERVER 2012.

Espero que me puedan brindar una mano con esto y una vez mas gracias por la ayuda.
  #2 (permalink)  
Antiguo 04/02/2015, 18:13
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Traer ultimo dato de cada "Categoria"

Cita:
Iniciado por khryztall Ver Mensaje
Buenas Tardes Amigos de Foros del Web;

Muchas gracias de antemano con la valiosa ayuda que me puedan brindar con lo siguiente:

Resulta que tengo la siguiente estructura de DB...


Código:
ID	Cat	ValorA	ValorB	ValorC	fecha
1	3	2	1	1	2014/10/31
2	4	3	1	1	2014/10/31
3	5	4	9	9	2014/10/31
4	6	3	8	8	2014/10/31
5	8	5	1	1	2014/10/31
6	9	2	1	1	2014/10/31
13	3	2	2	2	2015/02/04
14	4	3	3	3	2015/02/04
15	5	4	4	4	2015/02/04
16	6	5	5	5	2015/02/04
17	8	6	6	6	2015/02/04
18	9	7	7	7	2015/02/04
La idea es traer el ultimo valor de cada categoría de los valores A B y C

Código:
ID	Cat	ValorA	ValorB	ValorC	fecha
13	3	2	2	2	2015-02-04
14	4	3	3	3	2015-02-04
15	5	4	4	4	2015-02-04
16	6	5	5	5	2015-02-04
17	8	6	6	6	2015-02-04
18	9	7	7	7	2015-02-04
he Intentado con:
Código SQL:
Ver original
  1. SELECT MAX(ID) AS ID * FROM TABLA1

y
Código SQL:
Ver original
  1. SELECT TOP 1 * FROM TABLA1,

pero los resultados no son los esperados, pensaba realizar, una consulta anidada con el max ID de la tabla, pero tengo la plena seguridad que debe hacerse de una manera, mucho mas sencilla, y como supondrán no se cual es esa manera, ya que la función LAST y LAST_VALUE, al parecer no pertenecen al SQL SERVER 2012.

Espero que me puedan brindar una mano con esto y una vez mas gracias por la ayuda.
Hola espero que el siguiente script te sea de ayuda:

Código SQL:
Ver original
  1. SELECT ValorA,ValorB,ValorC FROM TABLA1 WHERE ID=(SELECT MAX(ID) FROM TABLA1)
  #3 (permalink)  
Antiguo 04/02/2015, 19:14
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Traer ultimo dato de cada "Categoria"

Cita:
Iniciado por shikamarucb Ver Mensaje
Hola espero que el siguiente script te sea de ayuda:

Código SQL:
Ver original
  1. SELECT ValorA,ValorB,ValorC FROM TABLA1 WHERE ID=(SELECT MAX(ID) FROM TABLA1)


Hola shikamarucb, eso ya lo habia intentado, pero los resultados que arrojan son los de la categoria, q tiene el mayor ID

Código:
ID	Cat	ValorA	ValorB	ValorC	fecha
18	9	7	7	7	2015-02-04
6	9	2	1	1	2014/10/31
pero no el ultimo de cada categoria
  #4 (permalink)  
Antiguo 04/02/2015, 19:37
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años
Puntos: 16
Respuesta: Traer ultimo dato de cada "Categoria"

¿Te sirve esto?

Código SQL:
Ver original
  1. CREATE TABLE FDW_1120042 (  ID INT, CAT INT, VALORA INT, VALORB INT, VALORC INT, FECHA datetime );
  2.  
  3. INSERT INTO FDW_1120042  VALUES (1, 3, 2, 1, 1, '2014-oct-31');
  4. INSERT INTO FDW_1120042  VALUES (2, 4, 3, 1, 1, '2014-oct-31');
  5. INSERT INTO FDW_1120042  VALUES (3, 5, 4, 9, 9, '2014-oct-31');
  6. INSERT INTO FDW_1120042  VALUES (4, 6, 3, 8, 8, '2014-oct-31');
  7. INSERT INTO FDW_1120042  VALUES (5, 8, 5, 1, 1, '2014-oct-31');
  8. INSERT INTO FDW_1120042  VALUES (6, 9, 2, 1, 1, '2014-oct-31');
  9. INSERT INTO FDW_1120042  VALUES (13, 3, 2, 2, 2, '2015-feb-04');
  10. INSERT INTO FDW_1120042  VALUES (14, 4, 3, 3, 3, '2015-feb-04');
  11. INSERT INTO FDW_1120042  VALUES (15, 5, 4, 4, 4, '2015-feb-04');
  12. INSERT INTO FDW_1120042  VALUES (16, 6, 5, 5, 5, '2015-feb-04');
  13. INSERT INTO FDW_1120042  VALUES (17, 8, 6, 6, 6, '2015-feb-04');
  14. INSERT INTO FDW_1120042  VALUES (18, 9, 7, 7, 7, '2015-feb-04');
  15.  
  16. SELECT a.ID, a.CAT, a.VALORA, a.VALORB, a.VALORC, b.FECHA
  17. FROM FDW_1120042 a
  18.     INNER  JOIN (   SELECT CAT, MAX(FECHA) AS FECHA
  19.                     FROM FDW_1120042
  20.                     GROUP BY CAT
  21.                     ) b ON b.CAT = a.CAT AND b.FECHA = a.FECHA
  22. ORDER BY a.CAT;
  23.  
  24.  
  25. DROP TABLE FDW_1120042;

Última edición por pcid; 05/02/2015 a las 07:41 Razón: Colorear en formato SQL
  #5 (permalink)  
Antiguo 05/02/2015, 08:46
 
Fecha de Ingreso: mayo-2011
Mensajes: 47
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Traer ultimo dato de cada "Categoria"

Excelente eso era lo que buscaba, lo hiciste ver tan sencillo, que hasta me hizo sentir mal, me pareció excelente la recursividad de unir sobre la sub-consulta, gracias de nuevo, pero al final no existe un comando o función para realizar eso.


Nuevamente muchas gracias.

Última edición por khryztall; 05/02/2015 a las 08:47 Razón: Mala Ortografia
  #6 (permalink)  
Antiguo 05/02/2015, 11:42
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: Traer ultimo dato de cada "Categoria"

podrias realizar un row_number(si estas trabajando con sql server en versiones mayores a 2005) con un order by descendete y solamente tomar el top 1 de cada resultado :), como dicen existen mil y un maneras de matar a una mosca, tu eliges cual :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: database, registro, server, sql, ultimo
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 09:55.