SELECT * from npath ( ON purchases_table PARTITION BY userid ORDER BY purchaseDate ON AddToCart_table PARTITION BY userid ORDER BY addToCartDate ON RemoveFromCart_table PARTITION BY userid ORDER BY removeFromCartDate ON ItemViews_table PARTITION BY userid ORDER BY viewDate Mode ('NONOVERLAPPING') Symbols (true as PURCHASE, AddToCart_table.pricePerItem >= 1000 AS expensiveAdd, AddToCart_table.pricePerItem <= 100 AS cheapAdd, RemoveFromCart_table.pricePerItem >= 1000 AS expensiveRemove, RemoveFromCart_table.pricePerItem <= 100 cheapRemove, true AS View) Pattern ('(View*).(expensiveAdd.(View*).expensiveRemove) | (cheapAdd.(View*).cheapRemove)Purchase+') Result ( (FIRST(AddToCart_table.itemId OF ANY (expensiveAdd, cheapAdd)), (FIRST(RemoveFromCart_table.itemId OF ANY (expensiveRemove, cheapRemove)), (FIRST((CASE WHEN AddToCart_table.pricePerItem >= 1000 THEN 'expensive' ELSE 'cheap' END) OF ANY (expensiveAdd, cheapAdd)) ) );