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

WinDev Discussion :

Besoin d'aide pour requête


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut Besoin d'aide pour requête
    Hello tout le monde,

    Je cherche à faire une requête un peu particulière :

    voici un exemple des données :

    Nom : Sans titre.png
Affichages : 335
Taille : 7,1 Ko

    Je souhaite sortir les lignes dès qu'une valeur de la colonne famille change :

    donc :

    Valeur 1 ; 27/02/2020 07:00:00
    Valeur 2 ; 27/02/2020 08:00:00
    Valeur 1 ; 27/02/2020 10:00:00

    En fouillant j'avais trouvé es fonction SQL LEAD() et LAG() qui pourraient fonctionner, mais visiblement Windev ne reconnait pas des instructions SQL (ni dans l'éditeur de requête ni en codant en dur...)

    Si quelqu'un a une idée ?

    sinon, je le fais en codant des fonctions, mais c'est un peu lourd...
    Je suis sûr qu'avec une requête on pourrait y arriver.

    merci d'avance !!!

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Hello jjacques68,

    pour moi je ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sValeur = ""
    HlitPremier(MonFichier, TimeCode)
    Tantque pas HEnDehors(MonFichier)
      si MonFichier.famille <> sValeur alors
        trace(Monfichier.famille + " " + dateheureversChaine(Monfichier.TimeCode))
      sValeur = Monfichier.famille
      FIN
    HlitSuivant(MonFichier, TimeCode)
    FIN
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    merciii !

    Oui j’ai fait par code aussi du coup...

    Mais j'aurai voulu l'avoir par requête...

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Voilà par requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select * from monFic 
      where ( timeCode , famille) not in ( 
      select   c.timeCode , c.famille   
      from ( 
      select a.famille, a.timeCode, min(b.timeCode)  as timeCode2
      from monFic a, monFic b 
      where b.timeCode > a.timeCode 
      group by a.famille, a.timeCode 
      ) r1 ,
      monFic c 
      where c.timeCode = r1.timeCode2 
      and c.famille = r1.famille 
        )
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    ouach !

    bon la faut que j'essaye cette requête !

    je tiens au courant !


    mercii !

  6. #6
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    hello, je déterre ce vieux post...

    je viens d'essayer, mais visiblement il y a un soucis avec la virgule dans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where ( timeCode , famille) not in (

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    C'est assez bizarre, mais la façon dont SQL gère le SQL est toujours bizarre.

    Contournement éventuel :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select * from monFic 
      where ( timeCode || famille) not in ( 
      select   c.timeCode || c.famille   
      from ( 
      select a.famille, a.timeCode, min(b.timeCode)  as timeCode2
      from monFic a, monFic b 
      where b.timeCode > a.timeCode 
      group by a.famille, a.timeCode 
      ) r1 ,
      monFic c 
      where c.timeCode = r1.timeCode2 
      and c.famille = r1.famille 
        )
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    toujours pas... faut pas oublier que je suis sous windev (23)

    Nom : Sans titre.png
Affichages : 283
Taille : 9,7 Ko

    Attention ligne 3 = Ligne 4 dans ton exemple.

    Je me dis que faire ça par requête prendrait moins de temps que mon traitement par code, mais est ce que c'est vrai ?
    Sans voir le code, c'est difficile à dire, mais sur environ 2000 enregistrements, mon traitement par code prends environ 1.5 à 2 secondes MAX...

  9. #9
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    J'ai regardé l'aide sur les sous-requetes ici et ce n'est pas dit clairement si cette syntaxe est acceptée ou non.

    Avec MySql à la place d'HFSQL, et avec le paramètre hRequeteSansCorrection, je suis à peu près sûr que ça marcherait.

    Essayons autrement, la page d'aide en question semble dire que exists est correctement géré :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select * from monFic aa
      where  not exists  ( 
      select   c.timeCode || c.famille   
      from ( 
      select a.famille, a.timeCode, min(b.timeCode)  as timeCode2
      from monFic a, monFic b 
      where b.timeCode > a.timeCode 
      group by a.famille, a.timeCode 
      ) r1 ,
      monFic c 
      where c.timeCode = r1.timeCode2 
      and c.famille = r1.famille 
      and aa.timecode = c.timecode and aa.famille = c.famille
        )
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  10. #10
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    hé bé, je suis total largué sur la compréhension de cette requête...

    Merci pour ta patience

    voici le message d'erreur :

    Nom : Sans titre.png
Affichages : 279
Taille : 9,4 Ko

  11. #11
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Pas clair, j'abandonne.
    A l'occasion, je vais tester de mon coté.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  12. #12
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Je comprends
    merci pour ton aide !

  13. #13
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    @jjacques68: Tu utilises HFSQL ou un autre SGBD ?
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  14. #14
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    j'utilise HFSQL

  15. #15
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 942
    Points : 1 933
    Points
    1 933
    Par défaut
    Ceci explique cela. HFSQL a un SQL relativement pauvre et n'accepte pas forcément toutes les requêtes.

    Essaye comme ceci mais sans grande certitude
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select * from monFic aa
      where  not exists  ( 
      select   c.timeCode + c.famille   
      from ( 
      select a.famille, a.timeCode, min(b.timeCode)  as timeCode2
      from monFic a, monFic b 
      where b.timeCode > a.timeCode 
      group by a.famille, a.timeCode 
      ) r1 ,
      monFic c 
      where c.timeCode = r1.timeCode2 
      and c.famille = r1.famille 
      and aa.timecode = c.timecode and aa.famille = c.famille
        )
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  16. #16
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    hello,

    Je viens d'essayer ta version @PhilouZ, malheureusement ça ne donne rien...
    Elle plante en cours de traitement au bout de 3, 4 secondes.
    Pas de messages d'erreur.

    Je crois que je vais laisser tomber, j'arrive très bien à faire ce que je veux par code.
    En plus, avec tous ces essais, j'ai l'impression que passer par une requête unique aura un temps de traitement plus long que par code !!

    Je vous remercie tous pour votre patience !

  17. #17
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Requete plus longue que code ... en principe non.

    Si tu as un PC, avec ta base de donnée sur ton PC, tout ça en local, le code sera effectivement assez compétitif comparé à une requête.

    Dès que tu es en réseau, ça peut changer. Avec du code, chaque instruction de type hLit() est comme un nouvel appel téléphonique de ton PC vers le serveur. Alors que pour une requête, il y a un et un seul appel téléphonique vers le serveur.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  18. #18
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 469
    Points : 121
    Points
    121
    Par défaut
    Il est vrai que je travaille sur le poste de dev...

    Après pour le client, je rapatrie les données sur son poste local et fait tous les calculs en local.
    Avec des tables classiques.

    La requête pour sélectionner les données à rapatrier du serveur HFSQL est < 1s (me sort environ 2000 lignes sur une table de + 500 000 lignes)
    La copies des données depuis le serveur HFSQL vers la table classique locale : < 200 ms
    Le traitement que je souhaitais faire par une requête et donc actuellement par code prends < 100 ms (donc traitement 100% local)

    Je trouve ces performances plutôt correctes.
    Et encore je peux mieux faire avec la 1ère requête de sélection, en faisant quelques modifications simples mais lourdes de conséquences (dans mon cas)

Discussions similaires

  1. [SQL Server 2005] Besoin d'aide pour requête
    Par Definol dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/07/2007, 13h55
  2. Besoin d'aide pour requête SQL
    Par dinver78 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/05/2007, 18h20
  3. Besoin d'aide pour requête simple
    Par vallica dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/02/2007, 09h33
  4. Besoin d'aide pour requête SQL
    Par vallica dans le forum Requêtes
    Réponses: 10
    Dernier message: 08/06/2006, 23h16
  5. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01

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