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

Développement SQL Server Discussion :

Requête des meilleurs prix sur pour tous les produit


Sujet :

Développement SQL Server

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Requête des meilleurs prix sur pour tous les produit
    Bonjour,

    Je bloque sur une requête que je souhaiterais faire, c'est sans doute très simple, mais le SQL n'est pas trop mon fort.

    Pour simplifier (je m'occuperais d'adapter à mon cas), j'ai une table "Produits" avec :
    ReferencePrix uniqueidentifier (clé primaire)
    ProduitID uniqueidentifier
    ReferencePartenaire uniqueidentifier
    Prix double

    Je souhaite pour chaque ProductID avoir une seule ReferencePartenaire avec le prix minimal.

    C'est à dire que si j'ai pour un ProduitID, 2 ReferencePartenaire qui ont un même prix "mini", je ne veux que le premier listé qui ressorte dans ma requête.

    J'espère avoir été assez clair et merci d'avance pour votre aide

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    Le but est juste de sélectionner ? ou tu veux updater/deleter quand on a plusieurs references avec le meme prix minimal ?

    Je sais pas si j'ai bien compris.
    Si tu veux juste la liste des ProduitID avec pour chacun la ReferencePartenaire avec le Prix le plus bas, je pense qu'en passant par une fonction tu devrais t'en sortir.
    En entrée : ProduitID
    En sortie : ReferencePartenaire correspondant au prix minimal

    La fonction en fait ca renverrait juste un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TOP 1 ReferencePartenaire, Prix FROM Produits WHERE ProduitID=--ton parametre d'entrée
    ORDER BY Prix ASC
    Et donc au final tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ProduitID,MyFunction(ProduitID) from Produits
    A tester/confirmer, je ne suis pas un pro SQL non plus

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Le problème, c'est que je souhaite faire cela une seule requête, composée à la limite et je veux récupérer le TOP 5 des produits les moins chers, avec la référence partenaire unique correspondante.

    Désolé de ne pas avoir été assez précis

    En tout cas, merci pour ton aide en tout cas mais je n'ai pas fait comme tu proposes car j'essaye d'optimiser

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    381
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 381
    Points : 231
    Points
    231
    Par défaut
    D'accord ! en fait tu veux faire un Select top 5 en te débarassant des doublons sur le champ Prix ?
    Si j'ai bien saisi je pense que ce sujet pourra peut-être t'aider.
    Mais c'est quelque chose d'à peu pres équivalent à la solution que j'ai mise au dessus, à savoir un SELECT dans un SELECT

  5. #5
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Si tu veux optimiser, commence par utiliser autre chose que tes GUID pour tes ids...

    sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    CREATE TABLE dbo.prix (
    ReferencePrix uniqueidentifier primary key not null default (newid()),
    ProduitID uniqueidentifier not null default (newid()),
    ReferencePartenaire uniqueidentifier not null default (newid()),
    Prix decimal (10,2))
    GO
     
    INSERT INTO dbo.prix (prix) values (10)
    INSERT INTO dbo.prix (prix) values (20)
    INSERT INTO dbo.prix (prix) values (30)
     
    INSERT INTO dbo.prix (ProduitID, ReferencePartenaire, prix) 
    SELECT ProduitID, ReferencePartenaire, prix * 2
    FROM dbo.Prix
    INSERT INTO dbo.prix (ProduitID, ReferencePartenaire, prix) 
    SELECT ProduitID, ReferencePartenaire, prix * 2
    FROM dbo.Prix
    GO
     
    SELECT ProduitID, ReferencePartenaire, prix
    FROM (
    	SELECT *,
    		rank() over (partition by ProduitID order by prix) as rang
    	FROM dbo.Prix) t
    WHERE t.rang = 1
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/10/2013, 23h20
  2. Dédié : affichage des erreurs php pour tous les domaines
    Par renaud26 dans le forum Administration système
    Réponses: 2
    Dernier message: 30/05/2008, 17h14
  3. Requête des meilleurs prix sur pour tous les produit
    Par Baathor dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2007, 20h28

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