I am sorry to butt in. It seems you already have answers to your scenario, but when I read the thread, I came to think of a few things.Is one journey always 2 segments? If no, don't read any further.What if a journey is 3 segments, would you want to see if a person has departed, been thru or arrived at for instance AU?Fiddling around, I came up with these suggestions.Your first question - arrived in AU (I added some segments, to make more than 2 segments on a single journey for a given person):with yourtable (journeynumber,segmentnumber,passengerid,flightnumber,departurestation,arrivalstation,idno,countrycode) as ( select 1,1,157117557, 213,'MEL','KUL','ABCDE','MY' union all select 1,2,157117557,1926,'KUL','HKT','ABCDE','TH' union all select 2,1,157117557,1929,'HKT','KUL','ABCDE','MY' union all select 2,2,157117557, 202,'KUL','OOL','ABCDE','AU' union all select 2,3,157117557, 203,'OOL','KUL','ABCDE','AU' union all select 2,4,157117557, 212,'KUL','MEL','ABCDE','AU' union all select 1,1,172429009,6123,'PEN','KUL','DEFGH','MY' union all select 1,2,172429009, 202,'KUL','OOL','DEFGH','AU' )select c.* from (select journeynumber ,passengerid ,min(segmentnumber) as minsegmentnumber ,max(segmentnumber) as maxsegmentnumber from yourtable group by journeynumber ,passengerid ) as a inner join (select journeynumber ,passengerid ,segmentnumber from yourtable where countrycode='AU' ) as b on b.journeynumber=a.journeynumber and b.passengerid=a.passengerid and b.segmentnumber=a.maxsegmentnumber inner join yourtable as c on c.journeynumber=a.journeynumber and c.passengerid=a.passengerid and c.segmentnumber between a.minsegmentnumber and a.maxsegmentnumber
Your second question - departure from PEN (Again I added some segments, to make more than 2 segments on a single journey for a given person):with yourtable (journeynumber,segmentnumber,passengerid,flightnumber,departurestation,arrivalstation,idno,countrycode) as ( select 1,1,157117557, 213,'MEL','KUL','ABCDE','MY' union all select 1,2,157117557,1926,'KUL','HKT','ABCDE','TH' union all select 2,1,157117557,1929,'HKT','KUL','ABCDE','MY' union all select 2,2,157117557, 212,'KUL','MEL','ABCDE','AU' union all select 1,1,172429009,6123,'PEN','KUL','DEFGH','MY' union all select 1,2,172429009, 202,'KUL','OOL','DEFGH','AU' union all select 1,3,172429009, 203,'OOL','KUL','ABCDE','AU' )select c.* from (select journeynumber ,passengerid ,min(segmentnumber) as minsegmentnumber ,max(segmentnumber) as maxsegmentnumber from yourtable group by journeynumber ,passengerid ) as a inner join (select journeynumber ,passengerid ,segmentnumber from yourtable where departurestation='PEN' ) as b on b.journeynumber=a.journeynumber and b.passengerid=a.passengerid and b.segmentnumber=a.minsegmentnumber inner join yourtable as c on c.journeynumber=a.journeynumber and c.passengerid=a.passengerid and c.segmentnumber between a.minsegmentnumber and a.maxsegmentnumber
Lastly, if a person departed, been thru or arrived at for instance AU:with yourtable (journeynumber,segmentnumber,passengerid,flightnumber,departurestation,arrivalstation,idno,countrycode) as ( select 1,1,157117557, 213,'MEL','KUL','ABCDE','MY' union all select 1,2,157117557,1926,'KUL','HKT','ABCDE','TH' union all select 2,1,157117557,1929,'HKT','KUL','ABCDE','MY' union all select 2,2,157117557, 212,'KUL','MEL','ABCDE','AU' union all select 1,1,172429009,6123,'PEN','KUL','DEFGH','MY' union all select 1,2,172429009, 202,'KUL','OOL','DEFGH','AU' union all select 1,3,172429009, 203,'OOL','KUL','ABCDE','AU' )select b.* from (select a.journeynumber ,a.passengerid ,a.minsegmentnumber ,a.maxsegmentnumber from (select journeynumber ,passengerid ,min(segmentnumber) as minsegmentnumber ,max(segmentnumber) as maxsegmentnumber from yourtable group by journeynumber ,passengerid ) as a inner join yourtable as b on b.journeynumber=a.journeynumber and b.passengerid=a.passengerid and b.segmentnumber between a.minsegmentnumber and a.maxsegmentnumber and b.countrycode='AU' group by a.journeynumber ,a.passengerid ,a.minsegmentnumber ,a.maxsegmentnumber ) as a inner join yourtable as b on b.journeynumber=a.journeynumber and b.passengerid=a.passengerid and b.segmentnumber between a.minsegmentnumber and a.maxsegmentnumber
Sorry for this long post.