Suma tiempos en consulta - Access 2003

He estado buscando esta duda y no localizo nada para poder realizar lo que quiero.

Lo primero decirles que trabajo con Access 2003.

Lo que tengo es una BD con una clasificación de corredores, que tiene el DNI como Id y los siguientes campos PUESTO, DORSAL, NOMBRE, APELLIDOS, FdN (Fecha de Nacimiento), SEX (Sexo), CAT (Categoría), EQUIPO, LOCALIDAD y TIEMPO - lo que hay entre paréntesis es lo que significa la abreviatura en ese campo -. Lo que quiero es que me saque los 4 mejores tiempo de cada equipo masculino (y los sume si es posible) y los tres mejores de cada equipo femenino (y los sume si es posible).

He conseguido sacar todos los equipos que tienen más de 4 o 3 corredores con la condición de sexo

Pero lo que no se es como quitar en los equipos que tiene más de 4 corredores en (M) y 3 en (F) es seleccionar los 4 mejores tiempos para sumarlos.

1 respuesta

Respuesta
1

Directamente con consultas no lo vas a conseguir, tendrás que recurrir a una tabla auxiliar (con los mismos campos que tu tabla) en la que vayas pasando los X mejores tiempos de cada equipo de los que te devuelve la consulta que muestras. Como el proceso requiere de código, y no es rápido de explicar, te paso un enlace a un ejemplo de Neckkito en el que explica cómo hacerlo: http://neckkito.xyz/nck/index.php/ejemplos/14-consultas/101-el-top-de-los-top

En tu caso, y a modo resumido, podrías usar algo como esto (que programarás en un botón de un formulario):

'Borras la tabla auxiliar (la llamaré TAux
CurrentDb.Execute "DELETE * FROM TAux"
'Coges los valores de la consulta (la llamaré CEquipos)
Dim rst as DAO.Recordset
Set rst=CurrentDb.Openrecordset("CEquipos")
rst.MoveLast: rst.MoveFirst
Do Until rst.EOF
   If rst(Sex")="M" Then
      CurrentDb.Execute INSERT INTO TAux SELECT TOP 4 * FROM Corredores WHERE Equipo='" & rst("Equipo") & "' AND Sex='" & rst("Sex") & "' ORDER BY Tiempo"  
   else
      CurrentDb.Execute INSERT INTO TAux SELECT TOP 3 * FROM Corredores WHERE Equipo='" & rst("Equipo") & "' AND Sex='" & rst("Sex") & "' ORDER BY Tiempo"
   End If
   rst.MoveNext
Loop

Ahora la tabla TAux tendrá los registros de los 4 mejores tiempos de los equipos masculinos con 4 o más miembros y los 3 mejores de los equipos femeninos con 3 o mas miembros. 

Tan solo te quedaría hacer una consulta sobre esta tabla auxiliar para sumar los tiempos.

Un Saludo.


http://nksvaccessolutions.com/academy/ 

Lo probaré a ver que consigo. Le cuento el resultado. Gracias

Cualquier duda, por aquí me tienes.

Buenas no soy capaz de programar el código, creo que realizo todo como me dices, lo que no entiendo es que significa FROM Corredores, es la tabla donde tengo a los corredores entiendo

Además se me pone en rojo lo siguiente

If rst(Sex")="M" Then
      CurrentDb.Execute INSERT INTO TAux SELECT TOP 4 * FROM Corredores WHERE Equipo='" & rst("Equipo") & "' AND Sex='" & rst("Sex") & "' ORDER BY Tiempo"  
   else
      CurrentDb.Execute INSERT INTO TAux SELECT TOP 3 * FROM Corredores WHERE Equipo='" & rst("Equipo") & "' AND Sex='" & rst("Sex") & "' ORDER BY Tiempo"
   End If

El If rst(Sex")="M" Then, lo he solucionado quitando " de (Sex")

Pero las dos lineas que pone CurrentDb siguen en rojo y si cambio lo de corredores por el Nombre de mi tabla se me marca se me subraya INTO.

Como verás no tengo mucho dominio de Access, todo ha sido por propia experiencia y preguntando en foros.

Gracias por la molestia.

Efectivamente Corredores es el nombre que he supuesto que tiene tu tabla, si no es ese, tendrás que cambiarlo en el código.

Hay un error en el código, me faltaron unas comillas, esa parte sería así:

If rst(Sex")="M" Then
      CurrentDb.Execute "INSERT INTO TAux SELECT TOP 4 * FROM Corredores WHERE Equipo='" & rst("Equipo") & "' AND Sex='" & rst("Sex") & "' ORDER BY Tiempo"  
   else
      CurrentDb.Execute "INSERT INTO TAux SELECT TOP 3 * FROM Corredores WHERE Equipo='" & rst("Equipo") & "' AND Sex='" & rst("Sex") & "' ORDER BY Tiempo"
End If

A ver si así te funciona.

Buenas parece que ya quiere actuar pero me salta lo siguiente

Ya esta faltaba en If rst (Sex") las comillas delante.

Me funciona perfecto, a ver como puedo perfeccionarlo.

Gracias

El tiempo no se puede sumar en Access, existe alguna forma.

El tiempo si se puede sumar, igual que las fechas, porque no dejan de ser números con un formato "especial".

Lo único que se me ocurre para que no lo puedas sumar es que tu campo sea de texto y no fecha/hora

Si cierto es voy a probar a ver que sale.

Lo logre, ahora estoy haciendo prueba para que me genere un ordinal, lo que es en Excel JERARQUÍA

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas