sql - Get corresponding rows in single line result? -


given following data, how desired result below?

timestamp | session id | event   | name ------------------------------------------ 08:15     | 89         | login   | scott 08:16     | 89         | edit    | scott 08:16     | 92         | login   | john 08:17     | 92         | refresh | john 08:23     | 89         | logout  | scott 08:28     | 92         | logout  | john 08:30     | 96         | login   | scott 08:37     | 96         | logout  | scott 

desired result (essentially list of session durations):

name  | login | logout ------------------------ scott | 8:15  | 8:23 john  | 8:16  | 8:28 scott | 8:30  | 8:37 

edit: extended sample data , results avoid confusion.


the query i'm needing develop more complex . thought give me jumpstart on 1 of logic hurdles. since know want know i've tried, here current, embarrassing, iteration actual structure...

select          sessionid,         samldata_organization,          (select timecreated ens.messageheader h1,hs_message.xmlmessage m1 h1.sessionid = h3.sessionid , m1.name = 'xdsb_queryrequest') requestrecieved,         (select timecreated ens.messageheader h1,hs_message.xmlmessage m1 h1.sessionid = h3.sessionid , m1.name = 'xdsb_queryresponse') responsesent          ens.messageheader h3,hs_message.xmlmessage m3 sessionid in (select distinct sessionid ens.messageheader timecreated >= '2016-08-22 08' , timecreated < '2016-08-22 17') 

things i'm trying tackle:

  1. join ens.messageheader , hs_message.xmlmessage
  2. get timecreated value messages of type xdsb_queryrequest
  3. get timecreated value corresponding xdsb_queryresponse using sessionid common value.
  4. return results organization | requestreceived | responsesent

pure left self join method

select     li.name     ,li.timestamp login     ,lo.timestamp logout     tablename li     left join tablename lo     on li.[session id] = lo.[session id]     , lo.event = 'logou'     li.event = 'login' 

left self join aggregation

select     li.name     ,li.timestamp login     ,min(lo.timestamp) logout     tablename li     left join tablename lo     on li.name = lo.name     , lo.timestamp > li.timestamp     , lo.event = 'logou'     li.event = 'login' group     li.name     ,li.timestamp 

the top 1 because constrains per sessionid can see per session look. bottom works if session id not unique name , login/logout pair looking for.

per answer should able written well:

select     li.samldata_organization,     li.sessionid,     m1.timecreated requestrecieved,     m2.timecreated responsesent     ens.messageheader h1     inner join hs_message.xmlmessage m1     on h1.messagebodyid = m1.id     , m1.name = 'xdsb_retrieverequest'     left join hs_message.xmlmessage m2     on h1.messagebodyid = m2.id     , m2.name = 'xdsb_retrieveresponse' order     h1.sessionid desc 

Comments

Popular posts from this blog

mysql - Dreamhost PyCharm Django Python 3 Launching a Site -

java - Sending SMS with SMSLib and Web Services -

java - How to resolve The method toString() in the type Object is not applicable for the arguments (InputStream) -