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 :

Requete sql pour trouver le min


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 16
    Par défaut Requete sql pour trouver le min
    Bonjour

    Je voudrais une requête qui me permet de tirer le min d'une date par ID produit
    sachant que la table initiale est le résultat d'un requete SQL. donc ça sera deux requêtes en une seule.
    voici la table résultante de la première requete

    id année prix
    1 2005 38
    1 2006 15
    2 2004 24
    1 2009 14
    2 2001 12
    2 1995 75

    et voici ce que je voudrais avoir

    id année prix
    1 2005 38
    2 1995 75


    Je vous remercie d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    allez voir un cours SQL sur GROUP BY avec MIN

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    Salut,

    Quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, MIN(année) annee, prix
    FROM TaTable
    WHERE tesCriteres
    GROUP BY id, prix
    NB : n'oublies pas de placer toute les colonnes qui ne sont pas dans l'agrégat MIN() au niveau de ton GROUP BY

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    Citation Envoyé par jowsuket Voir le message
    Salut,

    Quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id, MIN(année) annee, prix
    FROM TaTable
    WHERE tesCriteres
    GROUP BY id, prix
    NB : n'oublies pas de placer toute les colonnes qui ne sont pas dans l'agrégat MIN() au niveau de ton GROUP BY
    Effectivement ma requête n'est pas correcte, on ne doit pas grouper le prix... Désolé pour la fausse information.

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    heu... en fait en relisant le post initial(et surtout en regardant l'exemple), je me rend compte que la mienne non plus

    se serait plutôt quelque chose du genre (en supposant qu'il existe une table produit contenant la liste des produits, sans doublon):

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT 
        P.id,
        M.annee,
        M.prix
    FROM Produit P
    CROSS APPLY(
        SELECT TOP(1)
            annee,
            prix
        FROM LaTable T
        WHERE T.idProduit = P.idProduit
        ORDER BY annee
    ) M

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    CROSS APPLY et TOP 1 !!!
    Bravo, tu cumules les horreurs !!!!!!!!!!
    Pour le coup je te met -1 tant que tu n'aura pas modifié ta requête... na !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 101
    Par défaut
    il existe surement une manière plus "Propre" (SQLPro va certainement nous la proposer) mais celle-ci fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Select ID, Annee, Prix
    from (
            select  ID, Annee, Prix, 
                    ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ANNEE) AS Row
            From  dbo.Test
    ) as A
    Where A.Row = 1

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    CROSS APPLY et TOP 1 !!!
    Bravo, tu cumules les horreurs !!!!!!!!!!
    et j'assume
    surtout quand les horreurs en question peuvent me sortir le résultat 10 voire 50 fois plus rapidement...


    Pour le coup je te met -1 tant que tu n'aura pas modifié ta requête... na !

    A +
    Par une autre aussi rapide ? là je sèche !

    PS : c'est vrai que le TOP 1 fait affreux, mais pour des raisons que je ne m'explique pas, un MAX(Colonne) est nettement plus lent qu'un TOP(1) Colonne [...] ORDER BY colonne DESC...

  9. #9
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour

    Pouvez vous nous donner la requête en question et éventuellement la structure des tables ?


    Une piste en attendant :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT
        id,
        annee,
        MIN(prix) OVER (PARTITION BY annee)
    FROM ...

Discussions similaires

  1. Requete SQL pour trouver des anniversaires
    Par hugo69 dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/09/2010, 14h43
  2. requete sql pour bd access97 a tables multiples
    Par waspy59 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2006, 00h11
  3. requete sql pour faire un classement
    Par beezee dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/03/2006, 13h03
  4. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12
  5. Requete SQL pour Access
    Par heraieros dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2006, 14h15

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