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 :

fonction MAX sur une date


Sujet :

MS SQL Server

  1. #1
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut fonction MAX sur une date
    Re Re Re Re bonjour à tous,

    Mon probleme est le suivant
    lorsque je fais une select de ma table le résultat
    est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Ticket   etat       update_date
    ------------------------------------
    5494	  1	2006-07-10 10:09:56.717
    5494	  2	2006-07-10 10:10:06.467
    5494	  4	2006-07-10 10:12:52.59
    5494	  6	2006-07-11 10:13:02.42
    5494	  7	2006-07-11 10:13:04.827
    5494	  4	2006-07-11 10:13:41.327
    5494	  6	2006-07-12 10:13:49.717
    5494	  7	2006-07-12 10:19:41.78
    je voudrais qu'il me ramene pour chaque jour
    l'enregistrement de la plus grand date. exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Ticket   etat       update_date
    ------------------------------------
    5494	  4	2006-07-10 10:12:52.59
    5494	  4	2006-07-11 10:13:41.327
    5494	  7	2006-07-12 10:19:41.78

    Merci à vous

    Le savoir n'est rien sans celui des autres !!
    La connaissance n'est rien sans celles des autres !!!

  2. #2
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    Quelque chose comme ceci (non testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t1.*
    FROM dbo.matable t1
    JOIN (SELECT MAX (update_date) as maxdate FROM dbo.matable GROUP BY SELECT CAST(DATEDIFF(d,0,GETDATE()) AS DATETIME)) t2 ON t1.update_date = t2.maxdate
    Rudi Bruchez
    Rudi Bruchez EIRL, solutions MS SQL Server et NoSQL
    LinkedIn - [Outil libre de diagnostic SQL Server : Sql Trismegiste]
    LIVRES : Optimiser SQL Server -
    Microsoft SQL Server 2012 Security Cookbook
    - les bases de données NoSQL

    e-learning : LinkedIn Learning - Pluralsight

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Re,

    Regarde cette discussion

  4. #4
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    la discution que tu ma router n'est ma exactememnt mon problème

    en fait je pense que vous n'avez pas compris je me suis surement mal exprimé
    le resultat de mon code SQL Select * from matable est le suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Ticket   etat       update_date
    ------------------------------------
    5494	  1	2006-07-10 10:09:56.717
    5494	  2	2006-07-10 10:10:06.467
    5494	  4	2006-07-10 10:12:52.59
    5494	  6	2006-07-11 10:13:02.42
    5494	  7	2006-07-11 10:13:04.827
    5494	  4	2006-07-11 10:13:41.327
    5494	  6	2006-07-12 10:13:49.717
    5494	  7	2006-07-12 10:19:41.78
    en fait je veux "POUR CHAQUE JOUR" (je ne suis pas en train de crier) l'enregistrement de la date maximale

    Merci à vous !!!
    La connaissance n'est rien sans celles des autres !!!

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    Salut,

    ben tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM TaTable 
    WHERE Datename(Day, Date) = Datename(Day, getDate())
    AND Date = (SELECT MAX(Date) FROM TaTable)
    WHERE Datename(Day, Date) = Datename(Day, getDate()) permet de récupérer que les enregistrements du jour.
    AND Date = (SELECT MAX(Date) FROM TaTable) permet de récupérer la date la plus ancienne

  6. #6
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    voila ta requete:

    select MAX(update_date) as DateMaxParJour
    from taTable ttb
    join
    (select convert(varchar,update_date,103) as DateParJour from taTable
    group by convert(varchar,update_date,103)) A on A.DateParJour=convert(varchar,ttb.update_date,103)
    group by convert(varchar,update_date,103)


    A+
    serge
    PS: suis bien la synthaxe, ne remplace que 'taTable' par le vrai nom de ta table
    Errare humanum est, perseverare diabolicum (Sénèque)

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 132
    Points : 91
    Points
    91
    Par défaut
    En fait, aprés relecture de ma réponse, je pense qu'elle n'est pas adaptée à ta question, car elle prendra systématiquement le maximum de la date en cours.

    Essaye plutôt ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM TaTable PB, 
    (SELECT Date, MAX(Date) AS MAXDate FROM TaTable  GROUP BY Date) ST
    WHERE PB.Date = ST.Date
    AND PB.Date = ST.MAXDate
    En espérant que ça réponde à ta question

  8. #8
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut Please Help !! à l'aide !!
    En fait voila la bonne explication
    je veux pour chque id_ticket la valeur de la date MAX pour chaque jours différent

    exemple

    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
     
    id_ticket id_state    upd_date
    -------------------------------------------
    3	    1	    2006-06-13 06:26:18.263
    3	    2	    2006-06-13 06:26:32.2
    3	    3	    2006-06-13 07:15:20.14
    3	    2	    2006-06-13 08:14:13.95
    3	    3	    2006-06-19 07:37:27.25
    3	    4	    2006-06-19 07:37:33.28
    3	    2	    2006-06-19 07:37:42.717
    3	    3	    2006-06-19 07:49:12.403
    3	    4	    2006-06-19 07:50:59.357
    3	    2	    2006-06-19 07:51:05.013
    3	    4	    2006-06-19 12:39:31.543
    3	    6	    2006-06-19 12:41:51.03
    3	    7	    2006-06-19 12:41:52.873
    au final je voudrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    id_ticket id_state    upd_date
    -------------------------------------------
    3	    2	    2006-06-13 08:14:13.95
    3	    7	    2006-06-19 12:41:52.873
    pour chaque jours ici le 13/06/2006 et 19/06/2006 une seul ligne pour max de la date pour chaque jours
    La connaissance n'est rien sans celles des autres !!!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Points : 502
    Points
    502
    Par défaut
    ../

  10. #10
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    requete TESTEE:

    select id_ticket,MAX(upd_date) as DateMaxParJour
    from ticket ttb
    join
    (select convert(varchar,upd_date,103) as DateParJour from ticket
    group by convert(varchar,upd_date,103)) A on A.DateParJour=convert(varchar,ttb.upd_date,103)
    group by id_ticket,convert(varchar,upd_date,103)

    resultat

    id_ticket DateMaxParJour
    ----------- ------------------------------------------------------
    3 2006-06-13 08:14:13.950
    3 2006-06-19 12:41:52.873

    (2 ligne(s) affectée(s))
    A+
    serge
    Errare humanum est, perseverare diabolicum (Sénèque)

  11. #11
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    bonjour serge , j'ai l'impression que ca boucle car j'ai lancer la requête il y a 5 minutes et elle tourne encore !!!
    La connaissance n'est rien sans celles des autres !!!

  12. #12
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    est ce que tu as un index sur ta table ?
    y a t'il des valeurs nulles dans le champ date ?
    n'y a t'il pas de transaction sur la table ?
    n'y a t'il pas de process (spid) qui bloque ta table?
    combien de lignes sur la table?

    moi je viens de faire le test avec 100 000 lignes => 4secondes ?
    ton délai n'est pas normal.

    A+
    serge
    Errare humanum est, perseverare diabolicum (Sénèque)

  13. #13
    Membre habitué Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Points : 140
    Points
    140
    Par défaut
    Alors

    1°) Est ce que tu as un index sur ta table ?

    => Oui il y a un index constituer de 7 colonnes
    => Il y a aussi un FK sur la table

    2°) Y a t'il des valeurs nulles dans le champ date ?

    => Non aucun enregistrement avec des dates Nulles.

    3°) N'y a t'il pas de transaction sur la table ?
    4°) N'y a t'il pas de process (spid) qui bloque ta table?

    => comment le savoir ????

    5°) Combien de lignes sur la table?

    => 80553 lignes
    La connaissance n'est rien sans celles des autres !!!

  14. #14
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    316
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 316
    Points : 367
    Points
    367
    Par défaut
    Bonjour à tous,

    essaie ceci :

    SELECT ticket.id_ticket, ticket.id_state, ticket.upd_date
    FROM ticket INNER JOIN
    (SELECT CONVERT(varchar, upd_date, 103) AS maxdate, MAX(CONVERT(varchar, upd_date, 108)) AS maxtime
    FROM test
    GROUP BY CONVERT(varchar, upd_date, 103)) ticket1 ON CONVERT(varchar, ticket.upd_date, 108) = ticket1.maxtime

    A+

  15. #15
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Merci d'utiliser les balises codes mes amis.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

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

Discussions similaires

  1. [BI4] IDT - Filtre native max sur une date
    Par HudsonSaul dans le forum Designer
    Réponses: 1
    Dernier message: 01/06/2015, 17h47
  2. Max sur une date par ID
    Par Nikimizi dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/09/2014, 10h26
  3. Requête SQL avec function MAX() sur une date
    Par mehdiyou1985 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/12/2012, 21h52
  4. Select avec max sur une date
    Par olibara dans le forum Requêtes
    Réponses: 10
    Dernier message: 06/07/2010, 07h18
  5. fonction max() sur une chaine (string)
    Par speedev dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/03/2009, 11h30

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