Ответ на поверхности. Поскольку Вы знаете отправную точку и точное условие для включения пользователя в статистику, то достаточно воспользоваться конструкцией INNER JOIN для поиска пар одинаковых событий в временном промежутке, например наподобие вот этого:
SELECT DISTINCT
orders.user_id
FROM
orders
INNER JOIN
orders AS canceledOrders
ON
canceledOrders.user_id = orders.user_id
AND canceledOrders.status = orders.status
AND canceledOrder.order_id <> orders.order_id
AND canceled.timestamp - orders.timestamp BETWEEN 0 AND 1800
WHERE
orders.status = 'cancel'