Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/08/2011, 18h39   #1
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Kazakhstan

Informations professionnelles :
Activité : Étudiant
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2011
Messages : 3
Points : 0
Points : 0
Par défaut Calcul de rang d'enregistrement par date

Bonjour,

c'est encore une question sur des calculs de rang, mais c'est un peu plus compliqué que la simple question de classement d'élèves par rapport a leur notes

je travail sur une base de données permettant de gerer la reproduction des vaches laitières, c'est assez exotique en effet.

Nénamoins je reste bloqué sur les éléments suivants

A partir de la table,

VELAGE (Id_velage, date_velage, ref_animal)

Je souhaite calculer le rang de chaque vêlage pour chaque animal :

Id_velage ref_animal date_velage N°_velage (rang)

1 5060 01/01/2000 1
2 5060 15/02/2001 2
3 5060 10/03/2002 3
4 7080 02/03/2000 1
5 7080 11/05/2001 2
6 9010 01/03/2011 1



C’est le nombre de dates de vêlage qui sont inférieurs à la date de vêlage elle-même +1, dans la série de vêlage de l’animal. C’est ce que je n’arrive pas à transcrire dans la requête.

Par ailleurs je souhaite réaliser le même calcul pour les Inséminations :

INSEMINATIONS (Id_insemination, date_IA, ref_animal)

Par contre pour les inséminations, la numérotation repart à 1 après chaque vêlage, puisque la chronologie est la suivante :

(ex) pour l'animal 5060
IA 1 15/03/1999
IA 2 10/04/1999
VELAGE 1 01/01/2000
IA1 01/05/2000
IA2 22/03/2000
IA3 01/06/2000
VELAGE 2 15/02/2001
IA1 01/07/2001
VELAGE 10/03/2002
IA1 ...

VELAGE et INSEMINATION sont reliés par ANIMAL (N°animal, date_naissance, date_reforme, cause_reforme)

de plus un animal peut être inséminé deux fois le même jours, mais il faut que le rang d'insémination soit différent , on ne doit pas avoir
IA1
IA2
IA2
IA4

merci d'avance pour vos contributions
giregandre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2011, 22h31   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
bonsoir,

dans un état, tu pourrais utiliser l'astuce de Papy Turbo: Comment insérer un n° de ligne dans un état ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 07h39   #3
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Kazakhstan

Informations professionnelles :
Activité : Étudiant
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2011
Messages : 3
Points : 0
Points : 0
merci f-leb,
mais ce la ne donne pas le résultat attenu. en effet si je tri par date et j'ajoute dans l'état un numéro de ligne j'obtiens le rang de la date sur la totalité des dates.
Mais ce que je veux obtenir c'est le rang de la date de vêlage d'un animal comparé à l'ensemble des dates de vêlage du même animal. cela serait comme des boucles de comptage dans la table...
giregandre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 10h22   #4
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
Bonjour,

dans l’état, il faut ajouter un regroupement sur ref-animal.

Avec l’état en mode création, cliquer sur le bouton "Regrouper et trier" dans le ruban. Ajouter le regroupement sur ref_animal puis le tri sur la date.
La textBox avec le compteur doit être dans la zone Détail du groupe ref_animal.
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 11h28   #5
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Une alternative par requête s'il n'y a pas trop de bestiaux, d'insémination ou de velage car ça risque d'être rapidement lent...

Requete pour l'ordre des velages par meuh :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
SELECT
 Velage.Id_velage,
 Velage.ref_animal,
 Velage.date_velage,
 1+(
SELECT
 COUNT(id_velage)
FROM
 Velage SV
WHERE
 SV.Date_Velage<velage.date_velage 
 AND 
  SV.ref_animal=velage.ref_animal) AS N°_Velage
FROM
 Velage
ORDER BY
 Velage.ref_animal,
 Velage.date_velage;
Requête pour ordre des inséminations entre velages :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
SELECT
 Actions.Action,
 Actions.AnimalAction,
 Actions.DateAction,
 IIf(Action="IA",
 1+(
SELECT
 COUNT(*)
FROM
 Insemination
WHERE
 ref_animal=AnimalAction 
 AND 
  Date_IA<DateAction 
 AND 
  Date_IA>(
SELECT
 NZ(MAX(Date_Velage),
 #1/1/1900#) AS MaxDateVelage
FROM
 Velage
WHERE
 ref_animal=AnimalAction 
 AND 
  Date_Velage<DateAction)),
 NULL) AS Ordre
FROM
 (
SELECT
 "IA" AS Action,
 ref_animal AS AnimalAction,
 Date_IA AS DateAction
FROM
 Insemination
UNION ALL
 
SELECT
 "VELAGE" AS Action,
 ref_animal AS AnimalAction,
 Date_Velage AS DateAction
FROM
 Velage) AS Actions
ORDER BY
 Actions.AnimalAction,
 Actions.DateAction;
A+

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/08/2011, 15h08   #6
Invité de passage
 
Homme
Étudiant
Inscription : août 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Kazakhstan

Informations professionnelles :
Activité : Étudiant
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : août 2011
Messages : 3
Points : 0
Points : 0
effectivement pour l'état je n'avais pas fait le regroupement, mais je dois pouvoir utiliser ces résultats pour la suite, donc l'état ne me satisfait pas.
merci qd même

Par contre les requêtes apportent quelque chose de pas mal, mais c'est vrai que ça fait beaucoup de résultats, plus de 7000. Si je garde les enregistrements jusque 3 ans, cela fera environ 9000 inséminations et 2000 vêlages... je pense que je vais avoir un petit poblème d'efficacité mais je ne sais pas comment faire autrement, je ne connais rien en programmation...

en tout cas merci
giregandre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2011, 19h49   #7
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
J'ai réalisé une simulation avec + de 26000 IA et vêlages, le temps est de quelques secondes sur mon ordi.

A noter que des index avec doublons (sur champ ref_animal en particulier) peuvent améliorer les performances.
Possibilité aussi d'éliminer de la requête avec une clause where supplémentaire les animaux réformés, etc...

Citation:
de plus un animal peut être inséminé deux fois le même jours, mais il faut que le rang d'insémination soit différent
Le plus simple est de saisir l'heure en plus de la date dans les champs date_ia, date_velage.

Ma base de test (.mdb) ici.

Bon courage,

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h39.


 
 
 
 
Partenaires

Hébergement Web