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 :

Requ�tes imbriqu�es et trier par date contrat


Sujet :

MS SQL Server

  1. #1
    Membre confirm�
    Inscrit en
    D�cembre 2008
    Messages
    62
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2008
    Messages : 62
    Par d�faut Requ�tes imbriqu�es et trier par date contrat
    Bonjour,

    Petit probl�me sur comment interpr�ter la requete pour obtenir le r�sultat souhait�.

    Exemple
    (cf. tableau en pi�ce jointe.)

    On a une liste des personnes disposant de plusieurs contrats. Je souhaite r�cup�rer le contrat CDI (date null) ou bien la date du contrat la plus r�cente !

    Sur la pi�ce jointe, je vous ai surlign� les lignes qu'on veut garder.

    Requete presque bon :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    SELECT nom,prénom,date FROM table a
    where ( (date is null) OR
    date=(SELECT MAX(b.date) FROM table b))
    Le souci avec cette requ�te, �a me sort 2 lignes doublons pour les personnes ayant un contrat CDI et un CDD.
    exemple sur le tableau :
    pour la personne A Thomas j'ai la ligne avec date vide et �galement celui avec date=05/08/2012.

    j'ai essay� plusieurs combinaisons qui deviennent vite casse-t�te...

    Avez-vous une id�e pour solutionner ce probl�me ?


    [Edit] : j'utilise bien SQL Server pour faire les requ�tes
    Merci d'avance.
    Images attach�es Images attach�es  

  2. #2
    Membre �prouv�
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2011
    Messages
    118
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Par d�faut
    Si tu es en SQL Server 2005 ou plus, tu peux utiliser une cte (Common Table Expression) et une fonction de classement (ROW_NUMBER). Il faut �galement filtrer sur le type de contrat 'CDI'.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    WITH cte AS (
    	SELECT Nom, Prénom, Date, ROW_NUMBER() OVER (PARTITION BY Nom, Prénom ORDER BY COALESCE(Date, GETDATE()) DESC) AS nb
    	FROM a
    	WHERE TypeContrat = 'CDI'
    )
    SELECT Nom, Prénom, Date FROM cte
    WHERE nb = 1

  3. #3
    Membre confirm�
    Inscrit en
    D�cembre 2008
    Messages
    62
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2008
    Messages : 62
    Par d�faut
    Je ne dispose pas de type de contrat, j'ai uniquement des dates...

  4. #4
    R�dacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par d�faut
    J'ai bien une solution � base de :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    MAX( ISNULL([Date], '9999-12-12') )
    ...mais c'est moche !
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pyd�velop

    Derniers articles:

    (SQL Server) Introduction � la gestion des droits
    (UML) Souplesse et modularit� gr�ce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre �prouv�
    Homme Profil pro
    Administrateur de base de donn�es
    Inscrit en
    Juin 2011
    Messages
    118
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 118
    Par d�faut
    Citation Envoy� par Cyr69 Voir le message
    Je ne dispose pas de type de contrat, j'ai uniquement des dates...
    Ok, je n'avais pas fait attention que lorsque �a concernait un contrat CDI la date �tait NULL... Ce qui est d'ailleurs logique, autant pour moi.

    Il suffit donc d'enlever la clause WHERE TypeContrat = 'CDI' ou de mettre en place la solution de pcaboche.
    La solution que je propose consid�re qu'un CDD a forc�ment une date ant�rieure � la date du jour pour prioriser les lignes CDI, mais ce n'est peut �tre pas la r�alit� dans ton mod�le.

  6. #6
    Membre confirm�
    Inscrit en
    D�cembre 2008
    Messages
    62
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2008
    Messages : 62
    Par d�faut
    @SQLDev, effectivement il se peut que les CDD aient des dates sup�rieures � aujourd'hui.

    sinon y a une solution que nous avons trouv� mais bon faut que je r�ussisse � l'adapter en fonction des champs que nous souhaitons (avec 9 jointures c'est vite casse t�te...)

    Soluce :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select a.nom,a.prenom, max(a.date) from table A
    right join (select nom,prenom from table where date is not null
    EXCEPT
    select nom,prenom from table where date is null) B
    on a.nom=b.nom
    group by a.nom,a.prenom
    UNION ALL
    select c.nom,c.prenom,c.date from table c where date is null
    J'avoue c'est un peu chaud la mais on a le r�sultat souhait�. Vous en pensez quoi ?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Criteria][Order] trier par date
    Par CPI_en_mousse dans le forum Hibernate
    R�ponses: 2
    Dernier message: 04/07/2007, 14h33
  2. [Paradox] Trier par date
    Par Fabs dans le forum Bases de donn�es
    R�ponses: 5
    Dernier message: 08/11/2006, 19h41
  3. Requ�te SQL de tri par date
    Par Alain15 dans le forum Requ�tes
    R�ponses: 8
    Dernier message: 03/08/2006, 08h34
  4. trier par date
    Par tounsi dans le forum Oracle
    R�ponses: 1
    Dernier message: 23/02/2006, 16h46
  5. [JSP] Trier par date une liste de fichier en JSP
    Par Total dans le forum Servlets/JSP
    R�ponses: 10
    Dernier message: 21/02/2006, 15h38

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