Access - Agrupacion de datos de tabla

 
Vista:
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 19/02/2021 14:37:25
Buenas, Tengo una tabla con los siguientes registros:

Inm.........Oper..........Fecha.........Valor
casa........Venta......1/2/2021......$1 200.00
casa........Venta......1/2/2010......$2 220.00
casa....... Alquiler....1/2/2009......$50.00
terreno....Venta......1/2/2020......$1 000.00

casa tiene 2 ventas y 1 alquiler. terreno tiene una venta.

Consulta:
Necesitaría ver el ultimo valor por cada Inm, Oper y Fecha con su respectivo valor coincidente, de manera que el resultado de la consulta sea:

Inm.........Oper..........Fecha.........Valor
casa........Venta......1/2/2021......$1 200.00
casa....... Alquiler....1/2/2009......$50.00
terreno....Venta......1/2/2020......$1 000.00

Como verán, necesitaría que no se muestre el registro con fecha 1/2/2010, ya que hay uno mas reciente.

Probé agrupando:

SELECT Tabla.Inm, Tabla.Oper, Max(Tabla.Fecha) AS MáxDeFecha
FROM Tabla
GROUP BY Tabla.Inm, Tabla.Oper;

Hasta ahí va bien, pero cuando agrego el campo Valor, muestra todos los registros. Cosa que no busco.
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Agrupacion de datos de tabla

Publicado por anonymous (6 intervenciones) el 19/02/2021 16:03:47
Pruébalo así

SELECT T2.inm, T2.Oper, MAX(T2.Fecha) AS Ultima, (SELECT top 1 VALOR FROM TABLA1 WHERE T2.Oper = TABLA1.Oper) AS Valor
FROM Tabla1 T2
group by T2.inm, T2.Oper

imagen_2021-02-19_100322
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 19/02/2021 21:00:41
Desde ya gracias por responder, pero no la entiendo bien. Es consulta en access con una sola tabla?
Gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 19/02/2021 21:06:20
Lo que no entiendo es por que aparece TABLA1, no estan todos los datos en T2?
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupacion de datos de tabla

Publicado por Anonimo (3314 intervenciones) el 19/02/2021 22:25:34
Crea una nueva consulta, no selecciones ninguna tabla.

Ponla en su 'Vista SQL' y copia (copy & paste) la SQL que te han ofrecido, tras ello ponla en vista diseño y podrás apreciar los detalles.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 19/02/2021 23:19:34
Gracias, ya lo hice. Pero no ejecuta ya que marca como error que no encuentra tabla 1.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Agrupacion de datos de tabla

Publicado por anonymous (6 intervenciones) el 20/02/2021 00:03:37
Tabla1 es Tabla en tu caso

Reemplaza tabla1 por tabla y te debe funcionar, esa es una forma de hacerlo, hay otras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Agrupacion de datos de tabla

Publicado por anonymous (6 intervenciones) el 20/02/2021 00:29:31
Tu query queda así:

1
2
3
SELECT T2.inm, T2.Oper, MAX(T2.Fecha) AS Ultima, (SELECT top 1 VALOR FROM Tabla WHERE T2.Oper = Tabla.Oper) AS Valor
FROM Tabla T2
group by T2.inm, T2.Oper

No te confundas con lo de T2 , ese es un alias porque hay que construir otro query interno que saque el valor asociado a la máxima fecha
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 22/02/2021 13:55:47
Muchísimas gracias, no sabia lo de crear consulta adentro.
de todas maneras el valor terreno esta tomando erróneo. pero veo si puedo hacer el ajuste y te cuento.
desde ya Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 22/02/2021 15:03:05
lo que estoy tratando de ver es como hacer para que terreno tenga valor 1000, que es el que le corresponde. si sabes la respuesta, te agradecería. de todas maneras estoy intentando.
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 22/02/2021 19:02:06
Por lo que estuve analizando, es una subquery. Yo no lo sabia.
De todas maneras, necesitaría saber como armarla para que de el resultado esperado ya que según tu respuesta , el resultado para terreno deberia ser 1000 y no 1200 ya que no le corresponde.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Agrupacion de datos de tabla

Publicado por anonymous (6 intervenciones) el 23/02/2021 03:39:14
Si tienes razón como nos enfocamos fue en obtener la venta de casa más reciente, olvidamos que terreno está reflejando un mal valor, por lo que hay que hacer varios querys, es que Access trabaja de una forma extraña.

SELECT T2.inm, T2.Oper, MAX(T2.Fecha) AS Ultima,
(SELECT top 1 VALOR FROM Tabla WHERE T2.Oper = Tabla.Oper ) AS Valor
FROM Tabla T2
group by T2.inm, T2.Oper
HAVING COUNT(*)>1

UNION ALL

Los que devuelven HAVING COUNT(*)=1

Te lo envié al correo interno para que lo pruebes y ya cortamos este hilo en el foro
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 23/02/2021 15:46:46
Gracias Jorge, pero estuve realizando algunas verificaciones y hay un problema en el dato de valor. ya que al agregar mas datos toma el valor mas alto de la serie o algo asi.
Puede ser que sea medio complejo como esta planteado. veré si hay alguna forma mas simple de plantearlo no será cosa que el access sea limitado para esta consulta en particular.
De todas maneras gracias, y veo de reformular el planteo. Abrazo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupacion de datos de tabla

Publicado por Anonimo (3314 intervenciones) el 23/02/2021 21:08:17
Si no hay posibilidad de que se repitan las tres variables (inm + oper + fecha) puedes lograrlo con una consulta simple como esta:


1
2
3
SELECT Tabla1.Inm, Tabla1.Oper, Max(Tabla1.Fecha) AS MáxDeFecha, First(Tabla1.Valor) AS PrimeroDeValor
FROM Tabla1
GROUP BY Tabla1.Inm, Tabla1.Oper;


Si no se repiten esos datos (en particular la fecha), no importara si 'valor' es el primero o cualquier otro ya que es todos al tiempo al ser único
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 23/02/2021 22:00:33
El valor esta relacionado a fecha, oper y a inm. junto con esos tres variables no se repite. Al poner en la consulta "PrimeroDeValor" esta arrojando un valor que no se relaciona. Me di cuenta al hacer esta modificacion de fecha:

casa........Venta......1/2/2010......$2 220.00 --> casa........Venta......1/2/2022......$2 220.00

Si bien pone la fecha maxima 2022, el valor que pone es el primero y no el que corresponde a esa fecha.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupacion de datos de tabla

Publicado por Anonimo (3314 intervenciones) el 24/02/2021 00:44:17
Inténtalo con ultimo, si la fecha es la mas alta, se presupone que también su valor será el ultimo , funcionara dependiendo de lo que entienda Access como ultimo y del orden de entrada de los datos (si respeta el mismo orden que la fecha).

En ocasiones basta una función a la que se le envíen los tres parámetros y devuelva el dato asociado.
Para obtener un buen rendimiento bastaría crear un índice en la tabla y utilizar Seek.

Lo que puede suponer un problema (con las funcionalidades primero y ultimo) es modificar los datos ya creados, el orden -que se supone es el de creación del registro- no se cambia .....



.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 24/02/2021 01:15:51
Jorge, creo que hay una manera. La estoy probando pero con dos consultas de accesos separadas en la que la primera agrupa Inm, oper, y fecha (máxima). Después otra consulta con todos los campos de la tabla más la primera consulta. Dentro de esta segunda consulta relaciono los campos y el resultado sería el esperado. Voy a probar unas veces más a ver si va bien, si es así, pongo acá la resolución para que la vean. Obvio que todo esto tomando ideas de diferentes foros..;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Agrupacion de datos de tabla

Publicado por anonymous (6 intervenciones) el 24/02/2021 01:28:37
Yo te escribí al interno y te propuse algo

Por lo que te entiendo buscas es obtener el registro con fecha más reciente para cada combinación de operación e inmueble, sea venta o alquiler y terreno o casa

Todo lo anterior unido a los registros únicos que no devuelven duplicados por operación y tipo de inmueble, no creo que te salga con solo dos querys, a menos que no importara la fecha más reciente

Ingresa con tu clave en lwdp para que mires el mensaje en tu buzón
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 57
Ha aumentado 1 puesto en Access (en relación al último mes)
Gráfica de Access

Agrupacion de datos de tabla

Publicado por Pablo (18 intervenciones) el 24/02/2021 22:36:05
Solucionado:

Con estas dos consultas, quedarìa mejor si se pudieran combinar las dos consultas en una sola. Pero al momento quedarìa asi..
La primera, que se llama "ConsultaMaximaFechas":
1
2
3
SELECT Tabla.Inm, Tabla.Oper, Max(Tabla.Fecha) AS MáxDeFecha
FROM Tabla
GROUP BY Tabla.Inm, Tabla.Oper;

La segunda:
1
2
SELECT Tabla.Inm, Tabla.fecha, Tabla.Oper, Tabla.Valor
FROM Tabla INNER JOIN ConsultaMaximaFechas ON (Tabla.inm = ConsultaMaximaFechas.inm) AND (Tabla.fecha = ConsultaMaximaFechas.MáxDefecha) AND (Tabla.Inm = ConsultaMaximaFechas.inm) AND (Tabla.Oper = ConsultaMaximaFechas.Oper);

Funciona bien. Que te parece?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Agrupacion de datos de tabla

Publicado por anonymous (6 intervenciones) el 24/02/2021 23:56:36
Hum. Pues si tu consideras que cumple con lo que requieres, dejadlo así.

Pero la realidad es que un SELECT Max solo actúa sobre una fecha máxima, es decir te obtiene solo una, la máxima que encuentre basado en un criterio de agrupamiento.

Pero si se dan varios duplicados por venta-casa, venta-terreno, alquiler-casa y alquiler terreno, en ese escenario no te funciona, porque necesitaríamos las máximas fechas de esos 4 escenarios y eso solo se puede lograr haciendo varios over así:

1
SELECT  MAX(FECHA) OVER (GROUP BY OPER, INM)

Pero ignoro si Access te soporte eso.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Agrupacion de datos de tabla

Publicado por Anonimo (3314 intervenciones) el 25/02/2021 12:05:21
Disponiendo de los datos básicos que definen como único al registro, se pueden obtener el resto que no se utilizan en la selección.

Para un gran volumen de datos lo adecuado seria una función

Si el numero de datos lo permite (a mas datos mas tiempo y se nota) un DLookup seria suficiente para obtener ese dato de ese registro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar