Вычислить среднее значение между строками в SQL, используя лаг и игнорировать первую строку - PullRequest
1 голос
/ 25 мая 2019

Я пытаюсь написать запрос SQL, который вычисляет среднее количество дней от покупки до покупки для всех клиентов, совершивших две или более покупки:

  Customer_ID     |   Average number of day
    1033          |            175
     11           |            334
    1100          |            202.5
    111           |            52.5

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

SELECT Customer_ID,  Order_Date Cur,
LAG(Order_Date, 1) OVER (ORDER BY Customer_ID) AS Previous,
DATEDIFF(day, LAG(Order_Date, 1) OVER (ORDER BY Customer_ID), Order_Date) 
[Days Between Purchases]
FROM Orders

enter image description here enter image description here

Как можно игнорировать первую строку вклиент и рассчитать средние между покупкой, чтобы купить?(Я должен использовать LAG в моем ответе

Ответы [ 2 ]

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

Ваш сценарий почти в порядке. Просто добавьте отношение идентификатора клиента к нему. Другой мудрый первый ряд всех действующих клиентов не будет NULL.

SELECT 
cur.Customer_ID, 
cur.Order_Date Cur,
previous.Order_Date Previous, 
DATEDIFF(day, previous.Order_Date, cur.Order_Date) [Days Between purchases]
FROM tblDifference cur
LEFT OUTER JOIN tblDifference previous 
    ON cur.RowNumber = previous.RowNumber+1 
    AND cur.customer_id = previous.customer_id;
1 голос
/ 25 мая 2019

Самым простым методом является агрегация и некоторая арифметика:

SELECT CustomerId,
       DATEDIFF(day, MIN(o.Order_Date), MAX(o.Order_date)) * 1.0 / NULLIF(COUNT(*) - 1, 0)
FROM Orders o
GROUP BY CustomerId
HAVING COUNT(*) >= 2;

В некотором смысле, «средние дни между заказами» - это вопрос с подвохом.Вы думаете, что вам нужно рассчитать разницу между каждым ордером и следующим.

На самом деле, вам просто нужно разделить общее время от первого ордера до последнего ордера на единицу меньше количества ордеров.Я могу дать вам понять, почему это работает.

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