home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.databases.ms-sqlserver      Notorious Rube Goldberg contraption      19,505 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 19,230 of 19,505   
   Erland Sommarskog to M.G.   
   Re: can't make left join correctly   
   14 May 16 11:59:18   
   
   From: esquel@sommarskog.se   
      
   M.G. (michael@gurfinkel.us) writes:   
   > I have a table that reflects events for customers - a customer has   
   > different event types registered along with event time.   
   >...   
   > I need to show customers and when their process was started and ended,   
   > as you could see not necessarily all are ended and some can be   
   > started/ended several times   
   >   
      
   Here is a solution:   
      
    WITH intervals AS (   
       SELECT a.CUST_ID, a.ETIME, b.ENDED   
       FROM   @T a   
       OUTER  APPLY (SELECT MIN(b.ETIME) AS ENDED   
                     FROM   @T b   
                     WHERE  b.CUST_ID = a.CUST_ID   
                       AND  b.ETIME   > a.ETIME   
                       AND  b.EVENT_ID = 2) AS b   
       WHERE  a.EVENT_ID = 1   
   )   
   SELECT CUST_ID, MIN(ETIME) AS STARTED, ENDED   
   FROM   intervals   
   GROUP  BY CUST_ID, ENDED   
   ORDER  BY CUST_ID, STARTED   
      
      
   The MIN(ETIME) is there for the case there are multiple rows with EVENT_ID = 1   
   after each other.   
      
      
   --   
   Erland Sommarskog, Stockholm, esquel@sommarskog.se   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca