SQL Найти следующую дату заказа для каждой строки в таблице заказов - PullRequest
0 голосов
/ 08 января 2019

У меня есть стол заказов. К каждому заказу прикреплена дата и идентификатор клиента.

Я пытаюсь определить, сколько существует случаев, когда у клиента разрыв между заказами превышает 365 дней.

Мое решение заключается в следующем: присоединить таблицу заказов слева к себе, чтобы определить следующий заказ для пользователя; однако, это работает невероятно медленно и кажется очень неэффективным:

SELECT
  COUNT(*)
FROM (
  SELECT
    transactions.customer_id,
    transactions.transaction_date,
    DATEDIFF(day, transactions.transaction_date, MIN(next_transactions.transaction_date)) days_to_next_transaction
  FROM (
    SELECT
      customer_id,
      transaction_date
    FROM
      transactions_table
  ) transactions
  LEFT JOIN (
    SELECT
      customer_id,
      transaction_date
    FROM
      transactions_table
  ) next_transactions
  ON
    transactions.customer_id = next_transactions.customer_id AND
    transactions.transaction_date < next_transactions.transaction_date;
)
WHERE
  days_to_next_transaction > 365

Теоретически я чувствую, что могу отсортировать список заказов по customer_id, а затем transaction_date. Отсюда мне нужно будет сделать только один проход из всех строк: я бы сравнил одну строку со строкой непосредственно под ней - если следующая строка будет иметь тот же customer_id, что и моя текущая строка, я вычислю дни до следующей транзакции как разница между датой в следующем столбце - текущей.

Есть ли способ реализовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...