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

Langage SQL Discussion :

DISTINCT + WHERE + ORDER BY + LIMIT


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Par défaut DISTINCT + WHERE + ORDER BY + LIMIT
    Bonjour à tous,

    J'ai une BDD Access avec une table (2_Offers_Configuration_Study) dans laquelle une colonne (Study_N°) contient des données de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    RJ-00016
    RJ-00017
    RJ-00098
    Test
    Vérification Prix
    RJ-00125
    RJ-00126
    J'aimerais pouvoir directement via SQL obtenir la dernière valeur descendante d'un champ contenant des données numériques, j'ai essayé différentes syntaxes sans succès depuis quelques jours... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set enr = base.OpenRecordset("SELECT DISTINCT Study_N° FROM 2_Offers_Configuration_Study WHERE Study_N° LIKE 'RJ-%' ORDER BY DESC LIMIT 1", dbOpenDynaset)
    Ou
    Set enr = base.OpenRecordset("SELECT Study_N° FROM 2_Offers_Configuration_Study WHERE Study_N° = 'RJ%' GROUP BY Study_N° HAVING MAX(Study_N°)", dbOpenDynaset)
    Avez-vous des pistes, ou une solution pour réaliser cette requête ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 779
    Billets dans le blog
    10
    Par défaut
    Bonjour,


    Tout simplement avec SELECT MAX(ma_colonne) ou MIN(ma_colonne) + une restriction permettant de filtrer la ou les valeurs recherchées (LIKE 'RJ%' par exemple)

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 185
    Par défaut
    Bonjour,

    C'est dans le ORDER BY qu'il faut "filtrer":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT Study_N° FROM 2_Offers_Configuration_Study WHERE Study_N° LIKE 'RJ-%' ORDER BY ltrim(replace(Study_N°, 'RJ-', ' ')) DESC LIMIT 1

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 779
    Billets dans le blog
    10
    Par défaut
    non : Sauf si la population de la table est très réduite, faire un DISITNCT inutile et couteux et utiliser la clause LIMIT avec un ORDER BY également inutile et couteux doit être remplacé par un select (min) comme indiqué précédemment.

  5. #5
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    non : Sauf si la population de la table est très réduite, faire un DISITNCT inutile et couteux et utiliser la clause LIMIT avec un ORDER BY également inutile et couteux doit être remplacé par un select (min) comme indiqué précédemment.
    J'ai essayé différente manière, cependant, j'ai une erreur de type : élément non trouvé dans cette collection... J'ai vérifier mes données je ne comprends pas ce qu'il bloque...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(Study_N°) FROM 2_Offers_Configuration_Study WHERE Study_N° = 'RJ-%'

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 779
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 779
    Billets dans le blog
    10
    Par défaut
    C'est normal, il faut utiliser l'opérateur LIKE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT MAX(Study_N°) 
    FROM 2_Offers_Configuration_Study 
    WHERE Study_N° LIKE 'RJ-%'

  7. #7
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Août 2013
    Messages : 9
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    Bonjour,

    C'est dans le ORDER BY qu'il faut "filtrer":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT DISTINCT Study_N° FROM 2_Offers_Configuration_Study WHERE Study_N° LIKE 'RJ-%' ORDER BY ltrim(replace(Study_N°, 'RJ-', ' ')) DESC LIMIT 1
    Erreur de syntaxe dans la CLAUSE ORDER BY, je comprends le code mais je ne vois pas pourquoi le ORDER BY bloque...

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

Discussions similaires

  1. distinct et order by
    Par Shivan dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 27/04/2007, 10h15
  2. limite de select * from where titi in (,) limite à 1000 char
    Par chimiotheque dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/01/2007, 17h35
  3. Réponses: 5
    Dernier message: 10/07/2006, 12h05
  4. Problème de trie avec distinct et order ??
    Par matt210 dans le forum Requêtes
    Réponses: 4
    Dernier message: 03/02/2006, 12h26
  5. Select distinct et order by
    Par arsgunner dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2004, 11h17

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