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

SQL Oracle Discussion :

probleme update utilisant une requete group by


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut probleme update utilisant une requete group by
    bonjour a tous, voila je suis bloque depuis pas mal detemps sur une requete assez complexe.. je vais essaye de m'exprimer le plus clairement possible:
    ma requete (qui ne fonctionne pas) est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    update ph2_item p set order_date=(
    select min_order_date, order_id from(
          select ship_date, min(order_date) as min_order_date from ph2_item p
          where customer_id in (select view_custid from ph2_view)
          group by ship_date
          order by ship_date
          )a
    where p.order_id=a.order_id);
    evidement, celle ci ne fonctionne pas car je ne selectionne pas order_id dans ma sous requete, car il ne faut pas que min(order_date) soit grouper par order_id. Clairement, comment selectionner l'order_id correspondant a min(order_date) sans grouper par order_id.. si quelqu'un m'a comprisson aide est vraiment bien venue.. merci beaucoup..
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Points : 171
    Points
    171
    Par défaut
    Bonsoir,

    quelque chose comme celà ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    update ph2_item p set order_date=
    	(
    	select min_order_date
    	from(
          		select p2.ship_date, min(p2.order_date) as min_order_date 
    		from ph2_item p2
          		where p2.customer_id in (select view_custid from ph2_view)
                     and  p.order_id=p2.order_id
          		group by p2.ship_date
          	    )
    	)
    ;

  3. #3
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    non, cette requete la ne fonctionne pas non plus.. merci quand meme
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tu peux réexprimer ton besoin, car j'ai eu du mal à saisir.
    Avec un p'ti exemple ce serait encore mieux.
    Merci
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    j'ai une table A qui contient les champ ID, o_date, et s_date.
    il faut pour tous les ID modifier o_date en lui affectant la valeur minimum des o_date ayant le meme s_date. Je crois que c'est beaucoup plus clair comme ca.
    il s'agit donc de faire un update utilisant un group by sur le champ s_date
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  6. #6
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    ah oui, pardon, j'ai oublier l'exemple :
    initialement si j'ai les lignes:
    id:5 ; o_date:12/01/07 ; s_date:15/01/07
    id:6 ; o_date:15/01/07 ; s_date:15/01/07
    id:7 ; o_date:17/01/07 ; s_date:16/01/07
    id:8 ; o_date:18/01/07 ; s_date:17/01/07

    il faudra obtenir ca:
    id:5 ; o_date:12/01/07 ; s_date:15/01/07
    id:6 ; o_date:12/01/07 ; s_date:15/01/07
    id:7 ; o_date:17/01/07 ; s_date:16/01/07
    id:8 ; o_date:18/01/07 ; s_date:17/01/07
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ah oui, beaucoup mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE A t1
    SET o_date = (SELECT MIN(o_date) 
    		  FROM A t2
    		  WHERE t2.s_date = t1.s_date
    		  )
    Je sais pas si le min doit inclure le ID ou pas.
    Ah, ben non tu as envoyé les lignes.
    EDIT : pour ne limiter qu'aux changements de date (Attention o_date doit toujours être NOT NULL, Sinon faut utiliser des NVL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE A t1
    SET o_date = (SELECT MIN(o_date) 
    		  FROM A t2
    		  WHERE t2.s_date = t1.s_date
    		  )
    WHERE o_date <>   (SELECT MIN(o_date) 
    		  FROM A t2
    		  WHERE t2.s_date = t1.s_date
    		  )
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  8. #8
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    ah oui?? je pensais que ma solution devrait forcement inclure un group by ship_date.. et effectivement j'ai des nulls pour o_date et s_date.. de plus je dois inclure une clause where car cela ne s'applique que a certain ID (ce que je n'ai pas preciser pour simplifier un maximum le probleme)..cela ne change-t-il pas la donne?
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  9. #9
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE A t1
    SET o_date = (SELECT MIN(o_date) 
    		  FROM A t2
    		  WHERE t2.s_date = t1.s_date
    		  )
    WHERE NVL(o_date, TO_DATE('01/01/0123', 'DD/MM/RRRR')) 
    		<> (SELECT MIN(o_date) 
    		  FROM A t2
    		  WHERE t2.s_date = t1.s_date
    		  )
    AND id = 5
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    cela semble presque marcher dans mom cas merci beaucoup, mais pourrais tu m'expliquer cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    WHERE NVL(o_date, TO_DATE('01/01/0123', 'DD/MM/RRRR')) 
    		<> (SELECT MIN(o_date) 
    		  FROM A t2
    		  WHERE t2.s_date = t1.s_date
    		  )
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

  11. #11
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Si o_date est NULL :
    On compare '01/01/0123' avec la date min pour la même s_date
    Si la date min est NULL, alors pas de MAJ (N'importe quoi <> NULL : FALSE)

    Si o_date n'est pas NULL
    On compare o_date avec la date min pour la même s_date (qui ne sera jamais null puisque o_date is not null)

    id:5 ; o_date:12/01/07 ; s_date:15/01/07
    id:6 ; o_date:NULL; s_date:15/01/07
    id:7 ; o_date:17/01/07 ; s_date:15/01/07
    id:8 ; o_date:NULL ; s_date:17/01/07
    Donnera (en gras les MAJ)
    id:5 ; o_date:12/01/07 ; s_date:15/01/07
    id:6 ; o_date:12/01/07; s_date:15/01/07
    id:7 ; o_date:17/01/07 ; s_date:15/01/07
    id:8 ; o_date:NULL ; s_date:17/01/07
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  12. #12
    Membre régulier Avatar de pseudobidon57
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Points : 101
    Points
    101
    Par défaut
    Merci beaucoup MCM, j'ai du modifier encore 2 petites choses mais c'est ok, grand merci pour ton aide..
    Desole pour l'orthographe, mais il n'y a pas d'accent sur les claviers anglais..sniff...

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

Discussions similaires

  1. [MySQL] probleme d'update d'une requete
    Par VIRGINIE87 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/09/2010, 22h21
  2. Probleme ADO adapter une requete sql pour l'utiliser dans mon code vb6
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/04/2009, 15h53
  3. Problème d'update d'une requête Union
    Par gestym dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/08/2007, 11h02
  4. probleme lors d'une requete sql (controle non activé)
    Par junty dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 09/09/2005, 15h45
  5. Réponses: 13
    Dernier message: 10/05/2004, 16h49

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