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

DB2 Discussion :

[AS400] Sql AS400: Identifier la transaction de stockla plus récente


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    CIO
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CIO

    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Par défaut [AS400] Sql AS400: Identifier la transaction de stockla plus récente
    Bonjour,

    J'ai une table (imhist) de mvts de stock:
    Article (itnbr), date de transaction (trndt), qté (trqty), type de transaction (tcode).

    Je cherche à identifier pour 4 types de transaction différents et pur chaque article, la transaction la plus récente et en connaître la quantité. Par contre je ne veux pas savoir quelle est le type de la transaction la plus récente. Celle qui m'intéresse est parmi ces 4types de transactions.

    J'ai pensé à qque chose comme:
    select itnbr, trqty, max(trndt) from imhist
    where tcode in ('IS', 'PH', 'SS', 'SP')
    group by itnbr, trqty
    having max(trndt) = trndt

    Mais la syntaxe n'est pas correcte.

    QQun aurait-il une idée?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select itnbr, tcode, sum(trqty), max(trndt) from imhist
    where tcode in ('IS', 'PH', 'SS', 'SP')
    group by itnbr, tcode
    having max(trndt) = trndt

  3. #3
    Membre confirmé
    Profil pro
    CIO
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CIO

    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Par défaut
    Merci Mercure mais cette syntaxe ne fonctionne pas sur mon as400 (j'avais lu différents posts qui donnaient cette solution). J'ai une solution qui serait de stocker la table sous ms-sql et utiliser cette syntaxe, mais le fichier est gros!

    Merci qd même

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Fais voir ici la requête SQL et les messages SQLxxxx que tu reçois, stp.

  5. #5
    Membre confirmé
    Profil pro
    CIO
    Inscrit en
    Novembre 2005
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : CIO

    Informations forums :
    Inscription : Novembre 2005
    Messages : 40
    Par défaut
    Bonjour,

    Désolé de ne répondre que maintenant.

    La colonne TRNDT ou l'expression de la clause HAVING n'est pas admis
    SELECT itnbr, tcode, sum(trqty), max(trndt) FROM imhist
    WHERE tcode IN ('IS', 'PH', 'SS', 'SP')
    GROUP BY itnbr, tcode
    HAVING max(trndt) = trndt
    ^
    |
    Le curseur est positionné sur la dernière ligne et désigne la partie droite de la clause having.

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Dans la clause HAVING, chaque colonne de la liste SELECT doit identifier une expression du GROUP BY...
    Or la colonne trndt ne figure pas en tant que telle (toute seule) dans la requête et c'est pour ça que tu as une erreur. L'AS400 n'y est pour rien, c'est ta syntaxe SQL qui n'est pas bonne et je ne l'avais pas vu la première fois que je t'ai répondu. Essaie qqch dans ce gout-là, j'ai pas testé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT a.itnbr, a.tcode, sum(a.trqty), max(a.trndt) FROM imhist a
    WHERE a.tcode IN ('IS', 'PH', 'SS', 'SP')
    AND a.trndt = (Select max(b.trndt) from imhist b
    WHERE b.itnbr = a.itnbr
    AND b.tcode = a.tcode 
    GROUP BY b.itnbr, b.tcode )
    GROUP BY b.itnbr, b.tcode

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

Discussions similaires

  1. AS400 SQL et instruction WITH
    Par Arrnno dans le forum DB2
    Réponses: 8
    Dernier message: 28/11/2012, 14h06
  2. Convertion vba en SQL AS400
    Par Marc_27 dans le forum DB2
    Réponses: 1
    Dernier message: 19/11/2009, 17h52
  3. Problème requête SQL AS400.
    Par Papytruc dans le forum AS/400
    Réponses: 13
    Dernier message: 19/01/2009, 15h15
  4. as400 sql/QUERY probleme de dates
    Par philswiss dans le forum Requêtes
    Réponses: 1
    Dernier message: 19/07/2007, 06h16
  5. [sql] [as400] [transaction]
    Par eizo dans le forum Langage SQL
    Réponses: 5
    Dernier message: 27/03/2006, 18h36

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