Это не полный ответ на весь вопрос.Вот заглушка для шага 1:
SELECT
user,
MAX(CASE WHEN action = 2 THEN action END) as action2,
MAX(CASE WHEN action = 5 THEN action END) as action5,
DATEDIFF(
MAX(CASE WHEN action = 2 THEN action END),
MAX(CASE WHEN action = 5 THEN action END)
) as days_between
FROM t
WHERE action in (2,5)
GROUP BY user
Хотя это не вычисляет ваш минус столбец - я не был полностью уверен, что такое отметка времени типа данных и возможна ли какая-либо прямая математика, или это строкаэто нужно преобразовать.Если вы можете добавить эту деталь к вашему q, это поможет (или оставит комментарий)
Мне было нелегко разобраться в вашем шаге 2, пожалуйста, улучшите ваш q, предоставив ожидаемые результаты