Valor máximo filtrando por registro.

Tengo una tabla que la he llamado "Movimiento de Ganado", en
ésta tengo los siguientes campos "Nombre", "nº crotal",
"Células".
En la segunda tabla, que la he llamado "RCS", tengo los
campos "nº crotal", "fecha" y "células".
A partir de la primera tabla genero un informe que me
representará el nombre de la vaca, su número de crotal y el
valor de RCS para la fecha más actual.
A modo de ejemplo:
La tabla "RCS" podría contener estos datos:
nº crotal/fecha/células
0001/01-05-2010/300
0001/03-06-2010/450
0001/13-09-2010/125
0002/02-04-2010/789
0003/01-04-2010/456
Si abro el informe "Movimiento de Ganado" y elijo la ficha
correspondiente a la vaca '0001' para el valor "Células"
Deberá poner: '125'
Pues para lograr esto tengo serias dificultades.
He probado con =DMáx() pero o me da #error o simplemente me da el valor máximo de toda la tabla de "RCS", sin restringirse al registro de la vaca que tenga seleccionado.
¿Pueden ayudarme?, gracias.
{"lat":43.4579033208894,"lng":-3.83079528808594}

1 respuesta

Respuesta
1
Creo que, en realidad, necesitas una función de dominio doble: es decir. Quieres el valor del campo Células cuando se cumplan 2 condiciones: que sea l mismo nº crotal y que sea el más reciente. Así pues, necesitas un DLookup dónde, en los argumentos, indiques el nº crotal (eso ya lo tienes en el registro en cuestión del informe) y la fecha más alta. Ahí es dónde entra la segunda función de dominio: DMax. Sobre la misma tabla, y pasando como criterio el nº crotal, el DMax te devolverá la fecha más reciente para el mº crotal seleccionado. Ese valor es el que debes utilizar en el DLookup.
Celulas = DLookup("Celulas", "RCS", "[nº crotal]='" & Me![nº crotal] "' & And [Fecha] = " & DMax("Fecha", "RCS", "[nº crotal]='" & Me![nº crotal] & "'"))
Ojo, escrito del tirón
Un saludo
Xavi
http://www.aesoft-databases.com
http://www.llodax.com
http://www.mvp-access.com
Que rapidez en contestar, gracias.
Te cuento, introduzco la sintaxis que me pasas pero me da un error, me dice que la expresión contiene errores "SINTAXIS NO VÁLIDA"
Un detalle que no te había dicho, el "nº de Crotal" no es un número, pues como puede contener letras, lo tengo como texto.
Gracias de nuevo
Jorge
Ya te dije que lo había escrito del tirón. Depende de dónde lo introduzcas (VBA o expresión) deberás cambiar las comas por punto-y-coma.
Por otro lado necesitas entender lo que se pone y, si procede, hacerlo por partes.
Finalmente indicarte que, posiblemente, las fechas debas formatearlas a formato americano para que Acccess las entienda.
La introduzco como expresión, en origen de control.
Y ahora me dice:
"Es posible que haya especificado un operando sin un operador"
Efectivamente he cambiado las comas por punto y coma, y además, el número de crotal ahora si que es número.
Respecto a las fechas, cómo se si tengo que formatearlas, ¿qué tipo de error me daría?
Gracias de nuevo y disculpa el nivel
Jorge.
Si la introduces como expresión... la cosa cambia.
Para empezar DLookup se convierte en DBúsq, DMax en DMáx, las comas en punto-y-coma y el Me! Deja de funcionar.
Para formatear la fecha debes utilizar la función Formato dónde utilizas la fecha devuelta por el DMáx formateada al formato americano (mm/dd/yyyy).
Dicho todo eso, creo que quedaría algo así:
=DBúsq("[Células]", "RCS", "[nº crotal]='" & [nº crotal] "' & And [Fecha] = #" & Formato(DMáx("Fecha", "RCS", "[nº crotal]='" & [nº crotal] & "'"); "mm/dd/yyyy") & "#")
Por cierto, un consejo: evita, en la medida de lo posible, nombrar campos/controles/objetos con caracteres especiales, acentos o espacios; simplifica mucho el código. Por ejemplo: en lugar de nº de Crotal, podrías utilizar NumCrotal. Se entiende exactamente igual, es mucho más fácil de escribir y de manejar en expresiones y código.
Me vas a liquidar!
He cambiado "nº crotal" por "CROTAL F" y he cambiado todas las comas por punto y coma y me queda así:
=DBúsq("[Celulas]"; "RCS"; "[CROTAL F]='" & [CROTAL F] "' & And [Fecha] = #" & DMáx("Fecha"; "RCS"; "[ CROTAL F]='" & [CROTAL F] & "'"); "mm/dd/yyyy") & "#")
¡Y me sigue diciendo lo mismo!
"Es posible que haya especificado un operando sin un operador"
Algo estoy haciendo mal sin lugar a dudas. ¿Qué más información te puedo dar que te ayude a descubrir el problema?
Gracias
Jorge
Hola de nuevo,
mira pongo esta expresión: =DBúsq("[Celulas]";"RCS";"[CROTAL F]=" & [CROTAL F] & "")
Y me aparece el último valor introducido para dicho CROTAL F, pero no logro que me de el malor con la fecha más alta.
Si te va bien, me mandas la bdd (mínima expresión de la misma con los datos necesarios para probar y comprimida) para ver como lo tienes.
[email protected]
Recuerda QUITAESTO no lo debes poner en la dirección (ya se que es obvio pero hay gente que me lo ha intet¡Ntado mandar a la dirección incluido el QUITAESTO)
Prueba esto.
El cuadro de texto dónde quieres mostrar las Células, le pones este origen del control:
=Nz(DBúsq("[Celulas]";"RCS";"[CROTAL F]=" & [CROTAL F] & " AND [Fecha]= #" & Format(nz(DMáx("Fecha";"RCS";"[CROTAL F] = " & [CROTAL F]);"01/01/1900");"mm/dd/aaaa") & "#");"Sin datos")
Y, para el de la fecha, este otro:
=DMáx("Fecha";"RCS";"[CROTAL F] = " & [CROTAL F])
A mi me parece que devuelve los datos correctos. Verifícalo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas