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 :

SOQL - Obtenir le plus récent pour chaque enregistrement


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Par défaut SOQL - Obtenir le plus récent pour chaque enregistrement
    Bonjour,

    Je développe en SOQL (très proche de SQL sur Salesforce)
    Mes données sont organisées ainsi :
    Dans la table A, j'ai les champs
    • ContentDocumentID
    • Title
    • Type
    • LastModifiedDate


    Je voudrais écrire une requête qui retourne
    Tous les ContentDocumentID, Title
    Tels que Type IN "'a2', 'a03', 'a04'"
    Tels que ContentDocumentID in "'cd0002', 'cd0003', 'cd00004', 'cd00005', 'cd00006'"
    Et que s'il y a plusieurs enregistrements pour un type donné, alors il retourne le dernier enregistrement.

    J'ai bien essayé une jointure du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT Type, 
        (
            SELECT Title, ContentDocumentId, LastModifiedDate 
            FROM A a 
           WHERE a.Type=Type 
           ORDER BY LastModifiedDate DESC 
           LIMIT 1
        )
    FROM A
    Mais je ne crois pas y arriver.

    Poiurriez vous m'aider ?
    Merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 641
    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 641
    Billets dans le blog
    10
    Par défaut
    Bonjour

    Jetez un coup d'oeil sur mon blog, un article y est justement consacré à ce sujet hyper récurrent

    C'est ici

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 5
    Par défaut
    Bonjour,

    Malheureusement la solution ne fonctionne pas : SOQL ne supporte pas les mots clés JOIN.
    Il faut alors imbriquer les requêtes "SELECT" pour un inner join que je n'arrive pas à faire correctement.

    Merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 641
    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 641
    Billets dans le blog
    10
    Par défaut
    Si SOQL n'accepte pas l'opérateur JOIN c'est qu'il est en retard de 25 ans sur la norme SQL !
    Vous êtes contraint d'utiliser ce vieux bousin ? Il existe des SGBD gratuits et qui sont à jour.


    S'il s'agit de faire une jointure INNER, vous pouvez toujours la faire à l'ancienne, dans la clause de filtrage WHERE ce qui ne change rien au principe des solutions proposées dans mon blog.

    Par exemple, la première solution écrite avec JOIN :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      SELECT B7IDEN                       
           , B7CPTE                       
           , B8SEQN                       
           , B8MONT                       
           , B8DTHR                       
      FROM TBB7                           
      INNER JOIN TBB8  B8                 
        ON  B8IDEN = B7IDEN               
      WHERE B8DTHR =                      
           (SELECT MAX(B8DTHR)            
            FROM TBB8 S8                  
            WHERE S8.B8IDEN = B8.B8IDEN)

    Se code ainsi selon l'ancienne syntaxe :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      SELECT B7IDEN                       
           , B7CPTE                       
           , B8SEQN                       
           , B8MONT                       
           , B8DTHR                       
      FROM TBB7
         , TBB8                        
      WHERE B8IDEN = B7IDEN               
        AND B8DTHR =                      
           (SELECT MAX(B8DTHR)            
            FROM TBB8 S8                  
            WHERE S8.B8IDEN = B8.B8IDEN)

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/03/2020, 19h42
  2. Réponses: 12
    Dernier message: 19/08/2017, 18h03
  3. [AC-2013] Obtenir la version la plus récente pour chaque semaine
    Par kimai dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 15/10/2015, 14h02
  4. Réponses: 3
    Dernier message: 20/08/2009, 13h52
  5. Réponses: 3
    Dernier message: 18/02/2009, 10h00

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