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

MS SQL Server Discussion :

Select Max Where


Sujet :

MS SQL Server

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut Select Max Where
    Bonjour à tous,
    Comme beaucoup, je require votre savoir pour me sortir d'une impasse!
    J'ai une table T1, plusieurs colonnes : ProchainControle (format Date) et Numero. Comment obtenir depuis cette Table, uniquement le ProchainControle et le Numero dont la valeur de ProchainControle est antérieur à aujourd'hui dont aucune valeur n'existe dans le futur ? Voilà mon bout de Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT MAX(ProchainControle) as [Dernier Controle le], TypeApp as Appareil, Code, Numero, Serie as [N° de Serie]
    FROM RetardControle
     
    where ProchainControle <= getDate()
     
    Group by TypeApp, Code, Numero, Serie
    Order by Numero
    (Voir la pièce jointe du résultat obtenu) Comme vous pouvez le voir, le Numero "95" à une date de 2000 alors qu'il en exite une de 2007. Donc cette ligne ne devrait pas apparaitre..
    Merci.. pour votre aide.
    Images attachées Images attachées  

  2. #2
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Oui, vous êtes vraiment préssé mais vous risquerez de ne pas trouver de réponses satisfaisantes. Prénez le temps d'illustrer par des exemples le résultat que vous voulez obtenir.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Salut,

    bon un peu de clareté : si j'ai bien compris, tu as deux cas :

    1- Si une date postérieure à la date du jour est associé à un code, ce code t'en veux pas.
    2- Si aucune date postérieure à la date du jour est associé à un code, tu veux sortir ce code et la date la plus proche de la date du jour.

    C'est ca ta question ?

  4. #4
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    slt,

    Effectivement, c'est le but recherché. En fait, j'ai bossé un peu depuis hier sur cette requête et cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT MAX(ProchainControle) AS [Dernier Controle le:], Max(retard) As [Retard en Jour], TypeApp AS Appareil, Code, Numero, Serie as [N° de Série]
    FROM RetardControle
    WHERE ProchainControle < GetDate() and Numero not in
    	(SELECT DISTINCT T2.Numero 
    		from RetardControle T2 where ProchainControle > GetDate())
     
    Group by TypeApp, Code, Numero, Serie
    Order by Numero
    Par contre, mon problème à évolué. Il faut maintenant que le tri se fasse sur "ProchainControle" de façon à avoir en tête de liste la date la plus vieille.
    Quand je teste en ajoutant "ProchainControle" dans mon Group By et Order by, le résultat est faux.. Merci pour le temps que vous me consacrez.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 848
    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 : 21 848
    Points : 52 964
    Points
    52 964
    Billets dans le blog
    6
    Par défaut
    QUelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT ProchainControle as [Dernier Controle le], TypeApp as Appareil, Code, Numero, Serie as [N° de Serie]
    FROM   RetardControle RC
    where ProchainControle <= getDate()
      AND ProchainControle = (MAX(ProchainControle) 
                              FROM   RetardControle
                              WHERE  ??? = RC.???)
    Order by Numero
    Comme vous n'avez pas décrit vos tables sous forme d'ordre SQL de DDL, impossible de compléter les ???

    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/ * * * * *

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    Ton problème a évolué parce que ta requete est fausse.

    Voici ce qu'il faut faire :

    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
     
    -- Résultat final : je récupère tous les éléments de code qui n'a pas
    -- de date future, mais uniquement pour la date la plus proche de la date du jour
    SELECT RC.Code, RC.Numero, RC.Serie, RC2.DT [MAXPROCHAINCONTROLE]
    FROM RetardControle RC
    INNER JOIN
    (
    	-- Pour les codes filtrés, je récupère la date la plus proche du jour
    	SELECT Code, MAX(PROCHAINCONTROLE) AS DT  
    	FROM RetardControle 
    	WHERE CODE NOT IN 	
    	--ici je jette les codes qui ont 
    	-- 1- soit uniquement un prochainControle "dans le future"
    	-- 2- soit des prochain controle "dans le passé" et "au moins un dans le futur"
    	(SELECT DISTINCT CODE FROM RETARDCONTROLE WHERE ProchainControle >=GETDATE())
    	GROUP BY CODE
    ) RC2
    ON RC.CODE = RC2.CODE
    AND RC.ProchainControle = RC2.DT
    ORDER BY RC2.DT

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 316
    Points : 146
    Points
    146
    Par défaut
    Bonjour,

    Voici le code qui solutionne mon PB (donné par une formatrice que j'ai eu il y a qq mois) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT MAX(ProchainControle) AS [Dernier Controle le:], Max(Retard) As [Retard en Jour], TypeApp AS Appareil, Code, Numero, Serie as [N° de Série]
    FROM RetardControle
    WHERE ProchainControle < GetDate() and Numero not in
    	(SELECT DISTINCT T2.Numero 
    		FROM RetardControle T2 WHERE ProchainControle > GetDate())
     
    Group by TypeApp, Code, Numero, Serie
    Order by 2
    Merci à tous pour votre aide.. A Bientôt

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/06/2014, 17h11
  2. Réponses: 1
    Dernier message: 24/08/2012, 11h54
  3. Requête SELECT . . . WHERE X = (Select max(X))
    Par Taylorised dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 13/06/2012, 16h20
  4. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 17h29
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36

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