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:
- join
ens.messageheader
,hs_message.xmlmessage
- get
timecreated
value messages of typexdsb_queryrequest
- get
timecreated
value correspondingxdsb_queryresponse
usingsessionid
common value. - 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
Post a Comment