@GK566

Как в MSSQL узнать следовала ли одна запись за другой за последние сутки?

Всем привет.

Подскажите, пожалуйста, как правильно (и быстро) определить следовала ли одна запись за другой в MSSQL?

Нужно понимать, обращался ли клиент за сервисом после покупки девайса в течение последних суток.

Смог набросать что-то типо такого, но как узнать именно порядок. Сервис нужен не до, а именно после покупки. И сервис не должен быть без покупки за последние сутки (да, странная задача).

SELECT *
FROM [action_log]
WHERE [client_id] = '12345' AND action_date >= DATEADD(hour, -24, GETDATE()) AND action_type IN ('purchase', 'service')
ORDER BY action_date DESC
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ответы на вопрос 2
LaRN
@LaRN
Senior Developer
Можно вот так попробовать:
SELECT purc.client_id, purc.action_date as DatePrch, srv.action_date as DateSrv
  FROM [action_log] purc
  INNER JOIN [action_log] srv
          ON srv.client_id   = purc.client_id
         AND srv.action_date > purc.action_date
         AND srv.action_type = 'service'
 WHERE action_type  = 'purchase'
   AND action_date >= DATEADD(hour, -24, GETDATE()) 
 ORDER BY action_date DESC
Ответ написан
Комментировать
Vapaamies
@Vapaamies
Психанул и снес свои ответы козлам, не отмечающим…
Подскажите, пожалуйста, как правильно (и быстро) определить следовала ли одна запись за другой в MSSQL?

Если ваша версия MS SQL уже поддерживает аналитические функции, самым быстрым способом будет как раз она. Правило "в течение суток после покупки устройства" нужно вписать в условие partition by.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы