Среднее время 2-й и 3-й даты для группы - PullRequest
1 голос
/ 28 мая 2019

Мне нужно найти среднее время в днях между вторым заказом клиента и третьим заказом

Я знаю, что мне нужно использовать timestampdiff, но я совершенно не знаю, как выбрать вторую и третью даты и нуждаюсь в каком-то гнезде.

SELECT CustomerID, 
       OrderDate, 
       diff, 
       avg(timestampdiff(day, start_date, end_date)) AS average_days 
    FROM () o3
   WHERE date3, date2
ORDER BY CustomerID, OrderDate;

Таблица

enter image description here

1 Ответ

1 голос
/ 28 мая 2019

Чтобы достичь желаемого результата, сначала необходимо рассчитать ROW_NUMBER из ваших данных PARTITION BY CustmerId.Затем сохраните строки только с RowNumber IN (2,3), а затем получите DateDiff между двумя днями.Следующий запрос поможет получить желаемые результаты -

SELECT CustomerID,datediff(MAX(OrderDate),MIN(OrderDate)) 
FROM
(   
    SELECT *,
    @row_num :=IF(@prev_value = concat_ws('',CsutomerID),@row_num+1,1)AS RowNumber
    , @prev_value := concat_ws('',CsutomerID)
    FROM your_table A
    ORDER BY CustomerID,OrderDate
)B
WHERE B.RowNumber IN (2,3)
GROUP BY CustomerID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...