Ordenar por valores máximos de un campo de una tabla y poder dividir ese valor entre el resto de valores del mismo campo

Igual os es un poco de lío, os explico:

El tema es que tengo una tabla que tiene los siguientes campos DNI, nombre, categoría y tiempo. Lo que quiero es de alguna forma que a través de consultas o código conseguir crear una nueva tabla en la que agregue un campo calculado del mejor tiempo (minímo) de cada categoría sea dividido por el resto de tiempos de los participantes. En consultas es fácil conseguir los mejores tiempos ¿pero cómo puedo hacer para poder dividir el resto de tiempos entre ese mejor tiempo?

Respuesta
2

A ver si me explico, y si no te preparo un ejemplo "rápido":

Si creas una consulta sobre tu tabla, con esos campos que mencionas, puedes crear un nuevo campo en la propia consulta que te muestre el mejor tiempo de cada categoría, con esta expresión:

MejorTiempo: DMín("tiempo","NombreTabla", "categoria='" & [categoria] & "'")

Y ahora que ya tienes el mejor tiempo en un campo de la consulta, puedes añadir otro en el que calcules la división: Tiempo/MejorTiempo

Un saludo.


Disculpa, la expresión, en la consulta sería así:

MejorTiempo: DMín("tiempo";"NombreTabla";"categoria='" & [categoria] & "'")

Con punto y coma (;) en vez de coma(,)

Añado, además, que si te da error al hacer la división, uses la función CFecha() para convertir a fecha el campo calculado anterior:

MejorTiempo: CFecha(DMín("tiempo";"NombreTabla";"categoria='" & [categoria] & "'"))

Buenos días Sveinbjorn El Rojo , y muchas gracias por tu tiempo:

El cálculo del mejor tiempo está perfecto. Ahora el problema lo tengo en que me da error al dividir el tiempo entre el mejor tiempo. Probé a hacerlo en otra tabla y también me da error. Yo puse lo siguiente no sé si tiene algún error:

Puntos: [Tiempo]/[mejortiempo]*100

Me pone que ponga el valor del parámetro mejortiempo que es el nombre del campo que calculamos anteriormente.

¿Hiciste lo de usar CFecha() en el campo MejorTiempo, como te decía en mi segunda respuesta? Si no lo haces, es probable que lo esté tomando como un texto y no una fecha, y por eso el error.

Te adjunto un ejemplo "rápido", para que veas que lo que te digo sí funciona: http://filebig.net/files/cMKzg7m5Gu

Dices que te pide el parámetro mejortiempo ¿has llamado realmente así al campo calculado? Si te sigue dando error siempre puedes usar de nuevo la expresión para calcularlo:

Puntos: [Tiempo]/CFecha("tiempo";"NombreTabla";"categoria='" & [categoria] & "'"))*100

Buenos días de nuevo Sveinbjorn El Rojo,

Ya conseguí que no diera error era por lo de la fecha y por lo de poner en el campo expresión en vez de agrupar por. Dos preguntas cortitas que seguro que para ti son fáciles y para mi echo horas y nada:

+ En la expresión que me diste: MejorTiempo: CFecha(DMín("tiempo";"NombreTabla";"categoria='" & [categoria] & "'")) como puedo añadir que coja los mejores tiempos por categoría pero a su vez por carrera (añadí el campo carrera para sacar puntuaciones pero de diferentes carreras).

+ En el campo puntos ¿es posible que si da decimal 6 o más aproxime para arriba y si da menos de 6 aproxime para abajo?

Gracias por tu paciencia...

1ª Pregunta: el criterio as de ponerlo como:

"categoria='" & [categoria] & "' AND carrera='" & [carrera] & "'"

2ª pregunta: Tienes la función Redondear(), o configura la propiedad formato del campo para que te muestre los decimales que desees

1ª Pregunta:

¿En que campo debo de poner el criterio? Probé en todos y  si lo pongo no me aparecen valores en la consulta. Yo imaginaba que había que modificar la expresión en el campo no en criterio ¿¿¿???

2ª pregunta:

La función redondear() ¿Dónde y como se utiliza? ¿en la expresión del campo?. En formato ya puse que me no me mostrara ningún decimal y formato fijo ya que con formato número general seguía poniendo decimales. (Disculpa mi ignorancia).

Ese es el criterio de la función DMin: quieres que te devuelva el tiempo mínimo que cumple esas dos condiciones (mira la ayuda de la función... XD)

 MejorTiempo: CFecha(DMín("tiempo";"NombreTabla";"categoria='" & [categoria] & "' AND carrera='" & [carrera] & "'"))

La fuhnción Redondear la aplicas al valor (o expresión) que quieres redondear (mira la ayuda de la función...):

Puntos: Redondear([Tiempo]/CFecha("tiempo";"NombreTabla";"categoria='" & [categoria] & "'"))*100;6)

1ª Pregunta: PERFECTO!

2ª Pregunta: debe tener algún paréntesis o algo mal pone que tiene un número incorrecto de argumentos la tabla se llama datos lo puse junto con los otros campos de la tabla pero da ese error. De todas formas ya lo miraré con más calma. Muchas gracias ... pensé que controlaba algo de Access pero no tengo ni pajolera ;)

Le sobra un paréntesis antes de multiplicar por 100

Eso ya lo probé, pero sigue poniendo lo mismo

Redondear([tiempo]/CFecha(DMín("tiempo";"NombreTabla";"categoria='" & [categoria] & "' AND carrera='" & [carrera] & "'"))*100;5)

¡Muchas Gracias Sveinbjorn El Rojo

Disculpa de nuevo Sveinbjorn El Rojo

 Esta es la expresión que tengo en la consulta para que me calcule los mejores tiempos:

*****MejorTiempo: CFecha(DMín("tiempo";"datos";"categoría='" & [categoría] & "'"))

Esta es la que tengo para que me calcule los puntos:

******Puntos: [mejorTiempo]/[tiempo]*100

Ahora viene la historia ... hay corredores que si son organizadores "ORG" puntúan la media de las 3 mejores carreras y si "abandona" puntuan 10 puntos. ¿hay forma de modificar eso en la consulta? imagino que muy complicado ...

Buenos días de nuevo Sveinbjorn El Rojo!

Disculpa de nuevo, pero sigo con mi odisea... Las puntuaciones dividiendo los tiempos funciona perfecto. Pero lo que te comentaba ¿no es posible poner excepciones de alguna forma?. Agregué una nueva tabla llamada "Estado" con los campos "ID" y "descripción" (En id puse 01,02, etc para relacionarlo con ese campo en la tabla resultados. En descripción tiene: abandono, fuera de control, etc). Yo lo que quería era en el campo puntos aparte de Puntos: [mejorTiempo]/[tiempo]*100 poner si el ID es 01 X puntos, si el id es 02 y puntos ¿Es posible? Siento darte tanto la paliza pero para mí esto de programación me resulta muy complicado.

Esta temporada casi no tengo tiempo libre, y no puedo pararme en profundidad a darte una respuesta.

Mira la función SiInm() para establecer condiciones, creo que es lo que necesitas usar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas