IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Calcul de rang d'enregistrement par date


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    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

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 690
    Points : 57 226
    Points
    57 226
    Billets dans le blog
    40
    Par défaut
    bonsoir,

    dans un état, tu pourrais utiliser l'astuce de Papy Turbo: Comment insérer un n° de ligne dans un état ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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...

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 690
    Points : 57 226
    Points
    57 226
    Billets dans le blog
    40
    Par défaut
    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.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 1
    Points
    1
    Par défaut
    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

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    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...

    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

Discussions similaires

  1. Filtrer les enregistrements par date
    Par cisgeek dans le forum Langage
    Réponses: 4
    Dernier message: 16/05/2013, 16h53
  2. [AC-2010] Créer des enregistrements par date à partir d'une période
    Par tangono dans le forum Access
    Réponses: 1
    Dernier message: 23/04/2013, 11h46
  3. Réponses: 2
    Dernier message: 17/01/2012, 10h09
  4. [XL-2007] Calcul du nombre de ligne par date
    Par goraaa dans le forum Excel
    Réponses: 2
    Dernier message: 29/12/2009, 11h39
  5. [MySQL] Afficher les enregistrements par date
    Par coco204 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/11/2007, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo