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 : SELECT MAX () & MAX() N-1


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
    Octobre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 55
    Par défaut Requete SQL : SELECT MAX () & MAX() N-1
    Bonjour à tous,

    Voilà je suis confronté à un problème.

    J'ai créé une requête qui me permet de récupérer des informations en fonctions de la date la plus récente (SELECT MAX(DATE)). Ca c'est facile.

    Mais maintenant j'ai besoin de récupéré les même info mais avec la dernière date précédent la dernière : un truc du genre : (SELECT MAX(date) N-1 )


    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,

    Postez nous la DDL de votre table et un jeu d'essai ..
    En principe pour faire cela je dirais que la fonction ROW_NUMBER() peut vous aider à réaliser ce que vous voulez faire.

    ++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 55
    Par défaut
    Merci de votre réponse.

    En faite je viens de trouver une solution mais la votre m'intéresse car elle est peut être plus optimisé.

    Voici ma requête :


    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    select 
    ivd.item 		as [ACTICLE],
    i.description		as [DESCRIPTION],
    i.product_code 		as [CODE PRODUIT],
    ivd.vend_num		as [N° FOURNISSEUR],
    vadd.name		as [FOURNISSEUR],
    ivd.rank		as [RANG],
    vall.curr_code		as [DEVISE],
    ivp.effect_date		as [DATE D APPLICATION],
    ivp.brk_qty_conv##1	as [BORNE QUANTITE 1],
    ivp.brk_cost_conv##1	as [PRIX UNITAIRE 1],
    ivp.brk_qty_conv##2	as [BORNE QUANTITE 2],
    ivp.brk_cost_conv##2	as [PRIX UNITAIRE 2],
    ivp.brk_qty_conv##3	as [BORNE QUANTITE 3],
    ivp.brk_cost_conv##3	as [PRIX UNITAIRE 3],
    ivp.brk_qty_conv##4	as [BORNE QUANTITE 4],
    ivp.brk_cost_conv##4	as [PRIX UNITAIRE 4],
    ivp.brk_qty_conv##5	as [BORNE QUANTITE 5],
    ivp.brk_cost_conv##5	as [PRIX UNITAIRE 5]
     
    from 
    dbo.vendor_all vall 
    inner join dbo.vendaddr vadd on vall.vend_num = vadd.vend_num
    inner join dbo.itemvend ivd on vadd.vend_num = ivd.vend_num
    inner join dbo.itemvendprice ivp on ivd.item=ivp.item
    inner join dbo.item i on ivp.item=i.item
    inner join dbo.matltran mt on i.item=mt.item
     
    where 
    ivd.rank = '1'
    and i.product_code in ('CAT','CAP')
    and i.p_m_t_code = 'P'
    and mt.trans_date > '2008-01-01'
    and ivp.effect_date in (select top 2 effect_date from dbo.itemvendprice where item=ivd.item group by effect_date order by effect_date DESC)
     
     
    GROUP BY
    ivd.item
    ,i.description
    ,i.product_code
    ,ivd.vend_num
    ,ivd.rank
    ,vall.curr_code	
    ,vadd.name
    ,ivp.effect_date	
    ,ivp.brk_qty_conv##1
    ,ivp.brk_cost_conv##1
    ,ivp.brk_qty_conv##2
    ,ivp.brk_cost_conv##2
    ,ivp.brk_qty_conv##3
    ,ivp.brk_cost_conv##3
    ,ivp.brk_qty_conv##4
    ,ivp.brk_cost_conv##4
    ,ivp.brk_qty_conv##5
    ,ivp.brk_cost_conv##5
     
    ORDER BY ivd.item ASC

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par olivier.x Voir le message
    Merci de votre réponse.

    En faite je viens de trouver une solution mais la votre m'intéresse car elle est peut être plus optimisé.
    Plus optimisé : sans doute.
    Plus sûre : absolument (car vous n'envisagez pas le cas où des dates seraient identiques).

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 55
    Par défaut
    Plus sûre : absolument (car vous n'envisagez pas le cas où des dates seraient identiques).
    Dans mon cas les dates ne peuvent être identiques car il s'agit d'une date et heure/min/seconde de saisie d'informations dans un ERP par conséquent il y a au moins quelques secondes d'écarts.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par olivier.x Voir le message
    Dans mon cas les dates ne peuvent être identiques car il s'agit d'une date et heure/min/seconde de saisie d'informations dans un ERP par conséquent il y a au moins quelques secondes d'écarts.
    Il n'empêche que la solution avec ROW_NUMBER() n'a que des avantages (au pire dispensables).

Discussions similaires

  1. requete SQL select
    Par soumaya_j dans le forum Requêtes
    Réponses: 3
    Dernier message: 24/05/2007, 10h02
  2. [sql][C#] requete sql select where
    Par Jessika dans le forum ASP.NET
    Réponses: 1
    Dernier message: 03/03/2007, 23h12
  3. requete SQl avec la fonction max () qui ne marche pas
    Par eclipse012 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 14h32
  4. Probleme Requete SQL SELECT
    Par paulo6907 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/10/2006, 11h07
  5. [POSTGRESQL] Requete SQL SELECT
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/02/2006, 09h30

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