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

Autres SGBD Discussion :

[Teradata] Sous-requête TOP refusée


Sujet :

Autres SGBD

  1. #1
    zzozo32456
    Invité(e)
    Par défaut [Teradata] Sous-requête TOP refusée
    Bonjour à tous,

    j'espère être dans le bon forum...

    je cherche à adapter une requête dans un environnement Teradata et rencontre quelques difficultés.

    Ma requête est un peu spéciale avec une sous requête dans le select.

    Teradata ne veut rien entendre : top et order by not allowed in subquery

    J'espère que ce n'est qu'un problème de syntaxe et pas une limite imposé par l'outil...

    Ma requête se présente comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select * , 
    (Select TOP 1 résultat 
      FROM MaTable Histo
      WHERE Histo.Nom = Matable.Nom
      And Histo.date < Matable.date
      ORDER BY Histo.date DESC
      ) AS ResultatMoins1
    From Matable
    Qu'en pensez vous ?

    Dernière modification par al1_24 ; 08/03/2017 à 10h27. Motif: Balises CODE

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Puisque tu as la chance de travailler avec Teradata, utilise toute la puissance des fonctions analytiques fenêtrées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  matable.*
        ,   FIRST_VALUE(matable.resultat) OVER (PARTITION BY matable.nom ORDER BY matable."date" DESC ROWS 1 PRECEDING) AS  ResultatMoins1
    FROM    matable
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    zzozo32456
    Invité(e)
    Par défaut
    Bonjour Al1 et merci pour ton message,

    j'ai joué à l'apprenti sorcier avec ce code mais je n'ai pas bien compris ce que j'étais en train de faire...
    Bon en mm temps je suis une bille en sql autant le préciser

    En tout cas ce qui est sur c'est que :
    - ce code fonctionne : il me renvoie un résultat
    - mais pas les résultats que j'attends

    Il va falloir que je creuse car j'ai l'impression qu'il me renvoie le résultat de l'agent à la période T+1 alors que j'aurais besoin du T-1.
    En plus il me renvoie quand même un résultat là ou je ne devrais rien avoir i.e. pas de résultat avec une date précédente.
    Bref, c'est un peu bizarre il va falloir que je regarde ca.

    Je vais creuser aussi pour comprendre cette notion de fonction analytiques fenetrees parce que pour l'instant c'est un peu du chinois

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Peut-être plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  matable.*
        ,   LAST_VALUE(matable.resultat) OVER (PARTITION BY matable.nom ORDER BY matable."date" ROWS 1 PRECEDING) AS  ResultatMoins1
    FROM    matable
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    zzozo32456
    Invité(e)
    Par défaut
    c'est assez bizarre car avec ce dernier code j'ai l'impression d'avoir les résultats de ma période en cours...

    C'est peut être normal car en fait j'ai une 2ème condition que je n'avais pas précisé sur un type de test

    J'avais donc adapté le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  matable.*
        ,   LAST_VALUE(matable.resultat) OVER (PARTITION BY matable.nom, matable.type ORDER BY matable."date" ROWS 1 PRECEDING) AS  ResultatMoins1
    FROM    matable
    Bref, je pense que ce sera plus simple si j'explique le besoin fonctionnel final parce qu'une autre méthode plus simple est peut être possible.

    J'ai une table dont je souhaite tout exporter (voir exemple joint), pour chaque enregistrement, je souhaiterais rajouter 2 colonnes
    qui m'indique en fait si les résultats précédents étaient KO.
    Au final, je voudrais identifier pour chacune de mes lignes si les tests étaient KO sur la période précédente pour l'agent et le type de test considéré, puis dans un second temps identifier les tests pour lesquels j'ai eu un KO sur les 2 précédentes périodes.

    dev.xlsx


    Bon allez je continue de creuser, @+ et merci

Discussions similaires

  1. Help requête sql avec 2 résultats?
    Par 2pass dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/04/2013, 08h31
  2. Réponses: 0
    Dernier message: 07/08/2012, 15h57
  3. [help] Requête SQL
    Par biyoann dans le forum Développement
    Réponses: 2
    Dernier message: 18/08/2008, 22h17
  4. Help Requêtes SQL
    Par bishope dans le forum Langage SQL
    Réponses: 9
    Dernier message: 05/02/2008, 10h17
  5. [débutant] Help requète sql
    Par eric8787 dans le forum VB.NET
    Réponses: 5
    Dernier message: 10/12/2007, 23h12

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