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 :

Recherche de date maxi en sql


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut Recherche de date maxi en sql
    Bonjour,

    J'ai dans une table les data suivantes:

    Produit ! Date ! PU
    ---------------------
    A 150110 2.3
    A 011008 0.36
    B 150409 4
    C 140408 5

    J'aurai voulu obtenir pour chaque produit, son prix à la date la plus récente, ie:

    A 150110 2.3
    B 150409 4
    C 140408 5

    J'ai essayé de mettre un WHERE sur le max de la date mais sans succès.

    Quelqu'un pourrait-il m'aiguiller ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Une solution :

    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
    WITH max_prod_date
    AS
    (
     SELECT 
      ROW_NUMBER() OVER (PARTITION BY produit ORDER BY date DESC) AS num,
      produit, 
      date,
      PU
     FROM t
    )
    SELECT 
     produit,
     date,
     PU
    FROM max_prod_date
    WHERE num = 1;
    ++

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    En voici une autre, toujours à base de CTE (que c'est chouette les CTE ):

    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
    ;WITH
    	DERNIERE_DATE AS
    	(
    		SELECT	Produit
    			, MAX(Date) AS last_date
    		FROM	dbo.maTable
    		GROUP	BY Produit
    	)
    SELECT		T.Produit
    		, DD.last_date
    		, T.Prix
    FROM		dbo.maTable AS T
    INNER JOIN	DERNIERE_DATE AS DD
    			ON T.Produit = DD.Produit
    			AND T.Date = DD.last_date
    Mais on peut aussi écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT		T.Produit
    		, DD.last_date
    		, T.Prix
    FROM		dbo.maTable AS T
    INNER JOIN	(
    			SELECT	Produit
    				, MAX(Date) AS last_date
    			FROM	dbo.maTable
    			GROUP	BY Produit
    		) AS DD
    			ON T.Produit = DD.Produit
    			AND T.Date = DD.last_date
    @++

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut CTE
    Merci beaucoup !

    Je viens de découvrir quelque chose que je vais de ce pas étudier.

    Merci beaucoup.

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Si vous voulez aller plus loin avec les CTE, voici un peu de lecture

    @++

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Par défaut
    Merci pour toutes ces informations.
    J'ai pu réaliser ce que je voulais faire: comparer les derniers prix de vente avec les derniers prix d'achat.

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

Discussions similaires

  1. Comparer des dates en T-SQL
    Par AbyssoS dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 22/03/2006, 16h06
  2. [VB6] Recherche de dates
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 22/03/2006, 15h40
  3. format date sous postgres sql
    Par ruppert62 dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 27/05/2005, 12h04
  4. [IB6 free] Date maxi en base ?
    Par qi130 dans le forum Débuter
    Réponses: 2
    Dernier message: 08/02/2005, 22h26
  5. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07

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