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

SQL Oracle Discussion :

Dernier événement entre plusieurs tables


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Dernier événement entre plusieurs tables
    Bonjour à tous,

    Pour commencer je tiens a préciser que je suis totalement néophyte dans le SQL

    J'ai accès à 3 tables différentes:

    • User_Identity qui contient les paramètres User_ID, User_FullName et User_Email (+ d'autres paramètres)
    • Historized_Item qui contient User_ID et Event_ID
    • Event qui contient Event_ID, Event_Type et Event_Date (+ d'autres paramètres)


    J'ai besoin de récupérer la date du dernier évènement 'Account unlocked' lié à un utilisateur.

    J'ai réalisé le code suivant mais je ne sais pas comment récupérer uniquement l' 'Event Date' la plus récente.

    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
     
    SELECT
        User_Identity.User_FullName,
        User_Identity.User_Email,
        (Event.Event_Date / 86400000) + 25569
     
    FROM
        User_Identity,
        Historized_Item,
        Event
     
    WHERE    
        User_Identity.User_FullName LIKE 'A%'
        AND User_Identity.User_ID = Historized_Item.User_ID
        AND Historized_Item.Event_ID = Event.Event_ID
        AND Event.Event_Type = 'Account unlocked'


    Merci d'avance

  2. #2
    Modérateur

    C'est une question qui revient très régulièrement.
    Escartefigue propose plusieurs solutions à ce problème dans son blog.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre du Club
    Merci al1_24 pou ta réponse. Je n'avais pas trouvé ce blog.

    Par contre malgré cela, je ne parviens pas à effectuer ce que je veux. Je m'y prend surement mal…

    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
    SELECT
        User_Identity.User_FullName,
        User_Identity.User_Email,
        (B8.Event_Date / 86400000) + 25569
     
    FROM
        User_Identity,
        Historized_Item
     
    INNER JOIN Event B8
        ON B8.Event_ID = Historized_Item.Event_ID
     
    WHERE    
        B8.Event_Date = (SELECT MAX(B8.Event_Date) FROM Event S8 WHERE S8.Event_ID = B8.Event_ID)
        AND B8.Event_Type = 'Account unlocked'
        AND User_Identity.User_ID = Historized_Item.User_ID
    ;

  4. #4
    Modérateur

    C'est un simple max :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      select ui.User_FullName
           , ui.User_Email
           , max(ev.Event_Date)
        from User_Identity    ui
        join Historized_Item  hi on hi.User_ID  = ui.User_ID
        join Event            ev on ev.Event_ID = hi.Event_ID
       where ui.User_FullName like 'A%'
         and ev.Event_Type       = 'Account unlocked'
    group by ui.User_FullName
           , ui.User_Email;

  5. #5
    Membre du Club
    Super merci !!