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 :

Aide sur Requête Select [WD14]


Sujet :

WinDev

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut Aide sur Requête Select
    Bonjour.
    Je souhaiterai transcrire cette requête sur HF-SQL.
    La syntaxe m'a été donnée par "ced" pour MySql:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t1.Fecha, t1.qte
    FROM Nom_table t1
    INNER JOIN Nom_table t2 ON t1.Fecha = t2.Fecha
    WHERE t1.qte <= 6
    GROUP BY t1.Fecha, t1.qte
    HAVING t1.qte = MAX(t2.qte)


    Ce que je souhaite faire:
    J'ai un fichier: Fecha et Qté:

    01/01/2011 ; 0
    01/01/2011 ; 2
    01/01/2011 ; 5
    01/01/2011 ; 7

    02/01/2011 ; 0
    02/01/2011 ; 2
    02/01/2011 ; 3
    02/01/2011 ; 8

    03/01/2011 ; 0
    03/01/2011 ; 2
    03/01/2011 ; 3
    03/01/2011 ; 6
    ...

    Je souhaite sélectionner pour chaque date, la qté la plus proche au paramètre:
    Fecha entre 01/01/2011 et 02/01/2011 ET Qté <=6

    Le résultat que je souhaite:
    01/01/2011 ; 5
    01/02/2011 ; 3

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 245
    Points : 12 880
    Points
    12 880
    Par défaut
    Bonjour,
    En fait tu cherches par date la quantité max inférieure au paramètre ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t1.Fecha, max(t1.qte)
    FROM Nom_table t1
    WHERE t1.qte <= 6 and fetcha between '01/01/2011' and '02/01/2011'
    GROUP BY t1.Fecha

    Tatayo.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    Hola TataTu.

    C'est super cela fonctionne

    Je souhaite que la requête me retourne aussi l'ID de la ligne.
    Mais si je l'ajoute dans le Select t1.IdLig, j'ai une erreur:
    "L'utilisation de fonctions agrégats avec d'autre rubriques ...."

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    J'ai trouvé une solution, ajouter MAX(IdLig) dans le select.
    Existe t'il une autre solution?

    Merci

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 245
    Points : 12 880
    Points
    12 880
    Par défaut
    Avec Max(idLig), tu n'as pas forcément le bon résultat.
    Je dirai une requête de ce genre:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT t1.Fecha, t1.qte,t1.id
    FROM Nom_table t1
    WHERE t1.qte <= 6 AND t1.fetcha BETWEEN '01/01/2011' AND '02/01/2011'
    and not exists(select 1 from nom_table as t2 on t2.fetcha = t1.fetcha and t2.qte> t1.qte and t2.qte <= 6)
    Je cherche toutes les lignes t1 dont la date est dans l'interval recherché, la quantité inférieure ou égale à la quantité recherchée, et pour lesquelles il n'existe pas de ligne t2 pour la même date et dont la quantité est supérieur à celle de la ligne t1, tout en restant inférieur ou égale à la quantité recherchée.
    Il existe aussi une autre méthode avec une jointure externe entre t1 et une sous-requête, mais je ne sais pas si elle est supportée avec HF (et je ne la maitrise pas non plus ).

    Tatayo.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    J'ai essayé, j'ai une erreur sur le ON, je l'ai remplacé par WHERE
    Le résultat n'est pas correct, il me retourne les qtés supérieures aussi.

    Avec WHERE t1.qte <= 3:

    01/04/11 3 57
    01/04/11 6 70
    02/04/11 0 14
    03/04/11 3 58
    03/04/11 6 71
    04/04/11 3 59
    ...

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 245
    Points : 12 880
    Points
    12 880
    Par défaut
    Effectivement, le ON était une erreur.
    Concernant la quantirté, est-ce que tu l'as changé aux deux endroits où elle est spécifiée ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.Fecha, t1.qte,t1.id
    FROM Nom_table t1
    WHERE t1.qte <= 6 AND t1.fetcha BETWEEN '01/01/2011' AND '02/01/2011'
    AND NOT EXISTS(SELECT 1 FROM nom_table AS t2 WHERE t2.fetcha = t1.fetcha AND t2.qte> t1.qte AND t2.qte <= 6)

    Je viens de faire le test sur ma base, et la requête fonctionne:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from val_chp_uts_art as v1 where v1.art_c_ref = '51515'
    Résultat:
    ART_C_REF CU_I_NUM VCUA_C_VALEUR
    51515 8 O
    51515 9 N
    51515 11 10
    51515 12 ANM
    51515 13 3
    51515 74 O
    51515 117 O
    51515 121 0
    51515 125 1

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from val_chp_uts_art as v1 where v1.art_c_ref = '51515' and v1.cu_i_num <= 17 and not exists(select 1 from val_chp_uts_art as v2 where v2.art_c_ref = v1.art_c_ref and v2.cu_i_num > v1.cu_i_num and v2.cu_i_num <= 17)
    ART_C_REF CU_I_NUM VCUA_C_VALEUR
    51515 13 3

    Tatayo.

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 251
    Points : 98
    Points
    98
    Par défaut
    Hola Tatayo.
    tu as raison ta requête fonctionne.
    J'avais inversé un t2 avec un t1.

    Tu es un crack.

    Merci beaucoup

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

Discussions similaires

  1. aide sur Requète Select
    Par manelBenAli dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/02/2007, 12h23
  2. Aide sur requêtes
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 08/02/2006, 16h05
  3. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 17h53
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33
  5. Besoin d'aide sur requête croisée
    Par keawee dans le forum Access
    Réponses: 7
    Dernier message: 18/11/2004, 09h46

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