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 :

Condition sur enregistrement precedent, nombre de valeurs consécutives [AC-2003]


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Condition sur enregistrement precedent, nombre de valeurs consécutives
    Bonjour, je suis debutant et je bute sur quelques chose qui doit avoir une solution toute bete depuis 6h:

    J'ai un table du type:
    Jour Produit
    1/08 clous 5mm
    2/08 clous 5mm
    3/08 clous 5mm
    4/08 vis 3mm
    5/08 vis 3mm
    6/08 vis 12mm
    7/08 clous 5mm
    8/08 clous 5mm


    Je souhaite faire une requete connaitre le nombre de jours de production de chaque campagne, et son jour de finalisation du genre:
    JourFin Produit NombreJour
    3/08 clous 5mm 3
    5/08 vis 3mm 2
    6/12 vis 12mm 1
    8/08 clous 5mm 2

    J'ai essaye de mettre un condition sur l'enregistrement precedent sans succes, faire plusieurs types de regroupement sans succes non plus (il y a plusieurs campagnes pour le meme produit comme dans l'exemple "clous 5mm"


    Merci d'avance si vous avez un petit coup de pouce pour moi. (j'imagine que la solution est simple)

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 350
    Points
    34 350
    Par défaut
    Bonjour,
    bienvenue sur DVP
    quelques questions pour nous aider a bien comprendre ta problematique
    1- chaque jour ne permet de traiter qu'un seul produit ?
    2- tu veux faire un equivalent de diagramme GANTT ?


    PLus tu nous en dis, plus on pourra te proposer des pistes efficaces

  3. #3
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour jpcheck,

    Pour répondre à tes questions:
    1- Oui, il n'y a qu'un seul produit par jour
    2- Le diagramme de Gantt n'etait pas prevu a la base mais dans un second temps pourquoi pas...

    Je suis en train de retoucher un tableau de bord quotidien d'une entreprise, fait en Access, pour l'instant je suis plus dans la phase compréhension et ajout de quelques donnees, dont celle du nombre de jours de la fabricacion en cours qui est l'objet de ce post.

    J'espere petit a petit apprendre en retouchant ce tableau de bord...
    Il doit y avoir une solution simple non?

    Merci d'avance pour votre aide.

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour Colt122,
    çà dépend de ce que tu appelles "simple".

    Supposons que la table s'appelle "Table1" avec les noms de champ que tu as renseignés.

    D'abord, dans un module, tu insères ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Global glSérie As Integer
    Global glProduit As String
     
     
    Public Function SérieEnCours(Produit As String)
    If Produit = glProduit Then   'il n'y a pas rupture de série
      SérieEnCours = glSérie
    Else                          'il y a rupture de série
      glSérie = glSérie + 1
      glProduit = Produit
      SérieEnCours = glSérie
    End If
     
    End Function
    Cette une fonction qui va nous permettre de regrouper par série.

    Ensuite, tu crées une requête :"Requête1GrouperLesSéries", dont voici le sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Table1.Jour, Table1.Produit, SérieEnCours([Produit]) AS série
    FROM Table1
    ORDER BY Table1.Jour;
    et une seconde :"Requête2LesRésultats" dont voici le sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Requête1GrouperLesSéries.Produit, Min(Requête1GrouperLesSéries.Jour) AS début, Max(Requête1GrouperLesSéries.Jour) AS fin, [fin]-[début]+1 AS durée
    FROM Requête1GrouperLesSéries
    GROUP BY Requête1GrouperLesSéries.Produit, Requête1GrouperLesSéries.série
    ORDER BY Requête1GrouperLesSéries.série;
    Elle te donne le résultat que tu souhaites.
    Reviens si tu rencontres des difficultés à mettre en place (créer module, créer requête en sql, ...)
    Bonne journée

  5. #5
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour Claude LELOUP,


    Avant tout merci beaucoup! Je trouve vraiment génial le fait que les gens s'entraident spontanement sur ce genre de forum...

    Effectivement je prends conscience que mon problème n'est pas si simple (je ne pensais pas avoir à faire appel au VB).
    J'ai donc adapté votre code a ma base de données, et je pense avoir compris le principe.
    Malheureusement, cela ne fonctionne pas. J'ai un message du type:
    "Cette expression n'est pas ecrite correctement ou est trop complexe pour etre evaluee".
    La premiere requete fonctionne MAIS, lorsque je l'execute, et que se navigue dans le resultat de la requete, le champ "série" reste actif et se reaclule constament. C'est a dire si je descents dans le resultat (Ma base contient beaucoup de donnees), je remonte un peu, puis je redescents, les champs vus-caches pui revus ont été recalculés.

    Je pense que c'est pourquoi la deuxième requete ne fonctionne pas.
    Bon, difficile d'être clair... avez vous une idée?
    Est ce possible de figer les resultats?
    Ou peute etre est-ce du a la quantite de donnees a traiter?


    Bonne journée

  6. #6
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Pour info,
    J'ai exporté le resultat de la premiere requete sous forme de table, et ensuite executé la deuxieme reque sur cette table (figee) plutot que sur la requete.

    Le probleme, je suppose, vient donc bien du champ "serie" en calcul permanent.
    Y a t'il un moyen d'utiliser la premiere requete directement de maniere figee?
    Ou un code pour sauver le resultat de la requete dans une table temporaire?

    Merci

  7. #7
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Avant de poster, j'ai testé donc si çà marche chez moi, pas de raison que cela ne marche pas chez toi.
    A mon avis en changeant les noms pour l'adapter à ta base, tu as dû commettre une erreur de syntaxe.

    Je te suggère de faire ceci :
    - dans ta DB, copie ta table, et baptise cette copie "table1"
    - remets les codes tels que je les avais postés.
    - double-clique sur Requête2....

    et si tu n'as pas le résultat, je mange mon chapeau !
    Quand cela marchera, si tu veux, nous verrons ensemble comment adapter à ta sauce.
    @+

  8. #8
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je viens de faire ce que tu me conseilles, et il y a un probleme:

    Extrait table1 (qui est en fait une requete)

    Jour Produit
    12/16/05 PROSOL 100 RED BL
    1/1/06 Z.STD 535
    1/2/06 Z.STD 535
    1/3/06 GAUDI 200
    1/4/06 GAUDI 200
    1/5/06 EUROPA 370
    1/6/06 EUROPA 370
    1/7/06 EUROPA 370
    1/8/06 EUROPA 370
    1/9/06 EUROPA 370
    1/10/06 EUROPA 370
    1/11/06 SEDA EUROPA 100
    1/12/06 SEDA EUROPA 100

    Extrait resultat requete 1

    Jour Produit série
    12/16/05 PROSOL 100 RED BL 1699
    1/1/06 Z.STD 535 1700
    1/2/06 Z.STD 535 1700
    1/3/06 GAUDI 200 1701
    1/4/06 GAUDI 200 1701
    1/5/06 EUROPA 370 1702
    1/6/06 EUROPA 370 1702
    1/7/06 EUROPA 370 1702
    1/8/06 EUROPA 370 1702
    1/9/06 EUROPA 370 1702
    1/10/06 EUROPA 370 1702
    1/11/06 SEDA EUROPA 100 1703
    1/12/06 SEDA EUROPA 100 1703

    Message d'erreur requete 2: Le type des données ne correspond pas dans l'expression des critères

    Pourtant dans la table d'origine, le jour est bien au format date.

    Une idée?

  9. #9
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Dans la table, peut-être. Dans la requête, pas sûr.
    Ne peux-tu pas essayer avec une copie rebaptisée de cette table sans transiter par une requête. ?
    désolé, je dois m'absenter qq temps
    Je lirai ta réponse tout à l'heure.

  10. #10
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bon, Claude, Merci pour ton soutien!!! (et ta patience)
    J'ai essayé avec une table au lieu d'une requete, sans succes
    J'ai eliminé les années antérieures, et tout fonctionne! Avec table, avec requete, et meme mon adaptation du début!
    En fait il devaite y avoir des donnees non conformes dans la table de base...

    Merci encore!

    Bonne journée


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul d'un nombre de valeurs consécutives
    Par AstridG dans le forum SAS Base
    Réponses: 1
    Dernier message: 06/12/2010, 21h50
  2. Condition sur le type d'une valeur retournée
    Par Andalor dans le forum Développement
    Réponses: 2
    Dernier message: 09/03/2009, 12h55
  3. [XSLT] Condition sur 1 caractere d'une valeur
    Par syvid dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 08/06/2006, 17h40
  4. [XSLT][ACCESS]condition sur valeur
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 23
    Dernier message: 10/01/2005, 14h14
  5. requete sql sur un grand nombre d enregistrement
    Par marielaure dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/08/2004, 11h53

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