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 :

[SQL2K5] Requete sur des dates.


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Par défaut [SQL2K5] Requete sur des dates.
    Bonjour,

    Voila 2h que je me triture les méninges (pas dans le bon sens apparemment) avec une requètes SQL.

    J'ai une table Appel avec donc une liste d'appel ^^
    Pour chaque appel on a la date de l'appel, date du prochain appel et l'entité reliée a cet appel.

    Tout d'abord j'affiche simplement tous les derniers appels de chaque entité pour un utilisateur donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select entityID, max(dateAppel) 
    From Appel(NOLOCK)
    where utilisateurID = '14' 
    Group by entityID
     
    J'ai 73 résultats.
    J'aimerais ajouté dans le select la date du prochain appel correpondant a la ligne du dernier appel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select entityID, max(dateAppel), dateProchainAppel 
    From Appel(NOLOCK)
    where utilisateurID = '14' 
    Group by entityID, dateProchainAppel
     
    Et la j'ai 240 résultat.
    En effet il ne m'affiche pas la date du prochain appel ou la date de l'appel et la plus récente mais toutes les lignes.

    Alors ensuite j'ai essayé des sous requète et plusieurs choses mais rien n'y fait je ne trouve pas al requete pour :

    afficher la date du prochain appel correspondant a l'appel le plus récent.

    Merci d'avance pour vos conseils !

  2. #2
    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,

    Essayez :

    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
    	CTE_DERNIER_APPEL AS
    	(
    		SELECT entityID,
    				MAX(dateAppel) AS maxDateAppel
    		FROM dbo.Appel(NOLOCK)
    		WHERE utilisateurID = '14' 
    		GROUP BY entityID
    	)
    SELECT A.entityID,
    		CTE.maxDateAppel,
    		A.dateAppel AS dateProchainAppel
    FROM CTE_DERNIER_APPEL AS CTE
    JOIN dbo.Appel AS A
    	ON CTE.entityID = A.entityID
    	AND A.dateAppel > CTE.maxDateAppel
    @++

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Par défaut
    Merci je vois a peu près quel genre de requète il faut faire avec ton exemple malgré que celui ci ne corresponde pas au resultat souhaité.

  4. #4
    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 jamais vous ne parvenez pas à trouver ce dont vous avez besoin, postez la structure de vos tables, si possible avec un jeu de données représentatif, et le résultat souhaité

    @++

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 86
    Par défaut

    Alors voila, je prend par exemple le cas de l'entité 53,
    avec dans l'ordre, entityID, dateAppel, dateProchainAppel, utilisateurID.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    53	2009-09-08 18:29:07.000	2009-09-11 00:00:00.000	14
    53	2009-09-17 08:57:36.000	2009-09-18 00:00:00.000	14
    53	2009-09-17 16:12:28.000	2009-10-20 00:00:00.000	14
    53	2009-09-29 11:12:47.000	2009-09-29 00:00:00.000	14
    53	2009-09-29 11:13:50.000	2009-10-02 00:00:00.000	14
    53	2009-10-02 15:49:47.000	2009-10-05 00:00:00.000	14
    La requete doit me retourner toute la ligne ou la dateAppel est la plus récente.

    si je fait sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT entityID, max(dateAppel), utilisateurID
    FROM dbo.Appel(NOLOCK)
    WHERE utilisateurID = '14' 
    and entityID = '53'
    group by entityID, utilisateurID
    il me retourne bein la bonne ligne mais je n'ai pas la valeur de la date du prochain appel.

    Si je fait sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT entityID, max(dateAppel), dateProchainAppel, utilisateurID
    		FROM dbo.Appel(NOLOCK)
    		WHERE utilisateurID = '14' 
    		and entityID = '53'
    		group by entityID, dateProchainAppel, utilisateurID
    il me retourne les 5 lignes.

  6. #6
    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
    Alors ça devrait être cela :

    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
    DECLARE @T TABLE
    (
    	entityID INT,
    	dateAppel DATETIME,
    	dateProchainAppel DATETIME,
    	userID INT
    )
     
    INSERT INTO @T VALUES (53, '20090908 18:29:07.000', '20090911 00:00:00.000', 14)
    INSERT INTO @T VALUES (53, '20090917 08:57:36.000',	'20090918 00:00:00.000', 14)
    INSERT INTO @T VALUES (53, '20090917 16:12:28.000',	'20091020 00:00:00.000', 14)
    INSERT INTO @T VALUES (53, '20090929 11:12:47.000',	'20090929 00:00:00.000', 14)
    INSERT INTO @T VALUES (53, '20090929 11:13:50.000',	'20091002 00:00:00.000', 14)
    INSERT INTO @T VALUES (53, '20091002 15:49:47.000',	'20091005 00:00:00.000', 14)
    --------------------------------------------------------------------------------
    INSERT INTO @T VALUES (53, '20090907 08:29:07.000', '20091004 00:00:00.000', 15)
    INSERT INTO @T VALUES (53, '20090916 18:57:36.000',	'20090917 00:00:00.000', 15)
    INSERT INTO @T VALUES (53, '20090916 06:12:28.000',	'20091019 00:00:00.000', 15)
    INSERT INTO @T VALUES (53, '20090928 01:12:47.000',	'20090928 00:00:00.000', 15)
    INSERT INTO @T VALUES (53, '20090928 01:13:50.000',	'20091001 00:00:00.000', 15)
    INSERT INTO @T VALUES (53, '20091001 05:49:47.000',	'20091003 00:00:00.000', 15)
     
    ;WITH
    	CTE_DERNIER_APPEL AS
    	(
    		SELECT entityID, userID, MAX(dateAppel) AS maxDateAppel
    		FROM @T
    		GROUP BY entityID, userID
    	)
    SELECT A.entityID,
    		A.userID,
    		CTE.maxDateAppel AS dateDernierAppel,
    		MAX(A.dateProchainAppel) AS dateProchainAppel
    FROM CTE_DERNIER_APPEL AS CTE
    JOIN @T AS A
    	ON CTE.entityID = A.entityID
    	AND CTE.userID = A.userID
    GROUP BY A.entityID, A.userID, CTE.maxDateAppel
    HAVING MAX(A.dateProchainAppel) >= CTE.maxDateAppel
    @++

Discussions similaires

  1. requete sql sur des dates
    Par dcaille dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/10/2009, 10h00
  2. requete sql sur des dates
    Par dcaille dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 27/10/2009, 16h52
  3. Tri d'une requete sur des dates
    Par arnaud036 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 14/05/2009, 23h26
  4. requete sur des dates
    Par nox75 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/05/2007, 11h04
  5. Réponses: 9
    Dernier message: 17/01/2004, 10h51

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