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

Langage SQL Discussion :

problème d'agrégation et de dates


Sujet :

Langage SQL

  1. #1
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut problème d'agrégation et de dates
    Bonjour à tous !


    une table :
    matable ( item, date, prix)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select item, max(prix) from matable group by item
    => renvoie donc le prix max pour chaque item

    Maintenant je n'arrive pas à avoir simplement la date de chaque maximum en face (edit : c'est à dire la date à laquelle le prix = max(prix) )

    item | date | max(prix) | date_du_max
    1 | '20081010' | 12 | '20080404

    est ce que vous voyez comment faire simplement ?
    je dois récupérer ce genre de dates sur de gros volumes de données, le prix étant déjà le résultat d'une fonction qui calcule une volatilité historique (bref, c'est lent)



    Merci !

    ps : SQL Server 2005

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    juste une question que représente les deux dates.
    car c'est un peu flou la formulation.

    item | date | max(prix) | date_du_max
    1 | '20081010' | 12 | '20080404

    A+

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Points : 18 395
    Points
    18 395
    Par défaut
    Attention, si le même prix_max a plusieurs dates la requête suivante va générer des doublons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH prix AS (SELECT item, max(prix) max_prix FROM matable GROUP BY item)
    SELECT
        te.item,
        te.date,
        prix.prix_max,
        td.date
    FROM
        prix
        INNER JOIN matable td
          ON td.item = prix.item
         AND td.prix = prix.max_prix
        INNER JOIN matable te
          ON te.item = prix.item

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT a, prix, date FROM
    (
    SELECT a, prix, date, row_number() over (partition by a order by prix) as rk
    from tatable
    ) t
    WHERE rk = 1
    dense_rank() à la place de row_number si on veut les ex-aequos...

  5. #5
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    merci de vos réponses !

    j'essaye ça et je reviens



    edit : je garde la solution de pacmann, j'aime c'est plutôt élégant.

    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
    26
    -- max et date du max
    SELECT ticker, vol, pricing_date FROM
    (
    	SELECT s.ticker, v.vol, v.pricing_date, row_number() over (partition BY s.ticker ORDER BY v.vol desc) AS [rank]
    	from stock s
    	inner join surface_vol v
    		on s.pk = v.pk_asset
    	where v.fixed_strike = 100
    		and v.maturity_bloomberg = '3M'
    		and v.pk_source = 1
    ) t
    WHERE [rank] = 1
     
     
    -- min et date du min
    SELECT ticker, vol, pricing_date FROM
    (
    	SELECT s.ticker, v.vol, v.pricing_date, row_number() over (partition BY s.ticker ORDER BY v.vol asc) AS [rank]
    	from stock s
    	inner join surface_vol v
    		on s.pk = v.pk_asset
    	where v.fixed_strike = 100
    		and v.maturity_bloomberg = '3M'
    		and v.pk_source = 1
    ) t
    WHERE [rank] = 1

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/10/2011, 22h49
  2. problème d'agrégation!
    Par cepex dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 01h33
  3. Problème d'insertion de la date
    Par bobic dans le forum Oracle
    Réponses: 3
    Dernier message: 07/10/2005, 12h49
  4. Problème de select sur une date (DATETIME....)
    Par zeldoi5 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 16/05/2005, 12h19
  5. Problème de reqûete sur la date, année et mois en cours
    Par Jean-Marc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/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