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 :

Gestion des dates en SQL


Sujet :

MS SQL Server

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Gestion des dates en SQL
    Bonjour,
    je dois rechercher dans une base sql le dernier enregistrement d'une table via la date, le pb c'est que ma requête me sort deux dates pour une même personne

    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     TOP (100) PERCENT dbo.PERSINFO_MASTER.S_SURNAME + ' ' + dbo.PERSINFO_MASTER.S_FIRSTNAME AS Nom, dbo.BOOKING_A.I_TERMINALID, 
                          MAX(dbo.BOOKING_A.D_DATE) AS Date
    FROM         dbo.PERSINFO_MASTER INNER JOIN
                          dbo.BOOKING_A ON dbo.BOOKING_A.I_PERSID = dbo.PERSINFO_MASTER.I_PERSID
    GROUP BY dbo.BOOKING_A.I_TERMINALID, dbo.PERSINFO_MASTER.S_SURNAME + ' ' + dbo.PERSINFO_MASTER.S_FIRSTNAME
    ORDER BY Nom
    Voici ce que cela me donne



    Par avance merci à vous
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Vous groupez par terminal_Id, donc la requête vous ramène par personne la plus grande date par terminal_Id.

    J'imagine qu'en réalité vous désirez connaître le terminal_Id de la dernière date.
    Si c'est le cas, essayez ainsi :
    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
    With SR (S_SURNAME, S_FIRSTNAME, I_TERMINALID, D_DATE, rn) as
    (
      SELECT pem.S_SURNAME
           , pem.S_FIRSTNAME
           , bka.I_TERMINALID
           , bka.D_DATE
           , row_number() over(partition by pem.S_SURNAME, pem.S_FIRSTNAME order by bka.D_DATE desc)
        FROM dbo.PERSINFO_MASTER as pem
        JOIN dbo.BOOKING_A       as bka
          ON bka.I_PERSID = pem.I_PERSID
    )
      SELECT S_SURNAME + ' ' + S_FIRSTNAME as Nom
           , I_TERMINALID
           , D_DATE
        FROM SR
       WHERE rn = 1
    ORDER BY Nom asc;

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci mais non, le but est de sortir où et à quelle heure chaque personne a pointé.

    Le pb que j'ai avec ce que j'ai fait, c'est que normalement je devrais avoir une seule fois la même personne, et la ce n'est pas le cas (je pense que la comparaison Max ce fait sur la date et non sur la date et l'heure).

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Rassurez-vous, le max prend bien en compte toutes les composantes du type datetime à savoir la date et l'heure.

    Par contre je ne comprends plus votre besoin, ces deux expressions sont vraiment différentes :
    Citation Envoyé par Pasder Voir le message
    je dois rechercher dans une base sql le dernier enregistrement d'une table via la date
    Citation Envoyé par Pasder Voir le message
    le but est de sortir où et à quelle heure chaque personne a pointé
    Une fois le besoin clarifié, pouvez-vous fournir le script de création des deux tables, quelques inserts pour les remplir et le résultat attendu ?

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Reponse effectivement je viens de remarquer que je ne suis pas très clair
    Le but le voila, j'ai besoins de sortir d'un logiciel de GTA, le dernier pointage d'accès de toutes les personnes se trouvant dans la société. Ceci afin de me permettre de gérer une liste incendie.

    D'où mon pb de devoir sortir le dernier et seulement le dernier pointage d'accès du personnel et l'Id de l'accès.

    Ce que je n'arrive pas à comprendre c'est pourquoi il me sort deux fois le même nom de personne alors que je demande le Max de la date de pointage, soit pour moi le dernier pointage.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Dans ce cas-là il suffit de ne pas s'intéresser au terminal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      SELECT pem.S_SURNAME + ' ' + pem.S_FIRSTNAME AS Nom
           , MAX(bka.D_DATE) AS Date
        FROM dbo.PERSINFO_MASTER AS pem
        JOIN dbo.BOOKING_A       AS bka
          ON bka.I_PERSID = pem.I_PERSID
    GROUP BY pem.S_SURNAME + ' ' + pem.S_FIRSTNAME
    ORDER BY Nom asc;

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Le soucis c'est que j'en ais besoin car suivant le numéro, c'est soit de l'entrée ou soit de la sortie.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 623
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par Pasder Voir le message
    Le soucis c'est que j'en ais besoin car suivant le numéro, c'est soit de l'entrée ou soit de la sortie.
    C'est donc normal que la personne ressorte 2 fois : une fois pour l'entrée et une fois pour la sortie, non ?
    Blog Perso | Kankuru (logiciel gratuit pour SQL Server)

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    Citation Envoyé par Pasder Voir le message
    Le soucis c'est que j'en ais besoin car suivant le numéro, c'est soit de l'entrée ou soit de la sortie.
    Dans ce cas là je vous renvoie à la première requête que je vous ai proposée.
    L'avez-vous au moins essayée ?

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Waldar Voir le message
    L'avez-vous au moins essayée ?
    Oui mais j'ai un message :
    Msg*102, Niveau*15, État*1, Ligne*7
    Syntaxe incorrecte vers ','.
    C'est la ligne , row_number() over(partition BY (pem.S_SURNAME, pem.S_FIRSTNAME ORDER BY bka.D_DATE DESC).
    Et la j'avoue mon incompétence, je ne connais pas cette fonction.

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 383
    Points
    18 383
    Par défaut
    C'est de ma faute, j'ai mis une parenthèse ouvrante en trop après le partition by !
    Remplacez-là avec celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           , row_number() over(partition BY pem.S_SURNAME, pem.S_FIRSTNAME ORDER BY bka.D_DATE DESC)
    Je corrige le code plus haut.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est de ma faute, j'ai mis une parenthèse ouvrante en trop après le partition by !
    Remplacez-là avec celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           , row_number() over(partition BY pem.S_SURNAME, pem.S_FIRSTNAME ORDER BY bka.D_DATE DESC)
    Je corrige le code plus haut.
    Merci pour tout, ça marche nickel, je vais essayer de comprendre

Discussions similaires

  1. PL/SQL: Gestion des dates
    Par claralavraie dans le forum PL/SQL
    Réponses: 3
    Dernier message: 08/09/2006, 10h21
  2. [VB6]gestion des dates
    Par luckelm dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/04/2006, 20h25
  3. Application international (Gestion des dates)
    Par vsavoir dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/08/2005, 10h22
  4. Réponses: 3
    Dernier message: 13/08/2004, 18h52
  5. [MCD] [MCD] Gestion des dates
    Par brionne dans le forum Schéma
    Réponses: 3
    Dernier message: 30/05/2003, 13h01

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