У меня есть схема с таблицей Customer и таблицей заказов. Клиент может разместить заказ в несколько дат. Мне нужно иметь предыдущий order_date для каждого order_date, соответствующего клиенту.Запрос, чтобы вывести дату предыдущего заказа, соответствующую клиенту?
Скажите, что заказчик разместил 4 заказа, затем для новейшего заказа (4-й заказ) - он должен вытащить текущий order_date и предыдущий order_date (3-й заказ). Для 3-го порядка, размещаемого клиентом, он должен вытащить 3-й заказ_дат как текущий order_date и предыдущий order_date (2-й порядок), так как он включен.
Я использую ниже запроса, чтобы получить предыдущий order_date, а затем присоединение с current_query, чтобы получить результат ::
select customerid, orderid, order_date as previous_order_date
from (
select c.customerid, o.orderid, o.order_date,
row_number() over (partition by c.customerid, o.orderid
order by o.order_date) rown
from customers c join orders o on c.customerid = o.customerid
) a
where rown = 2
Но вопрос, я получаю одну дату, соответствующую CustomerID, тогда как требование - только предыдущий order_date, соответствующий текущему order_date для клиента.
Любое предложение поможет! Благодаря
Хорошая находка! Объяснение: http://docs.oracle.com/database/121/DWHSG/analysis.htm#CHDCBCGF «Поскольку функции обеспечивают доступ к нескольким строкам таблицы одновременно без самоподключения, они может повысить скорость обработки. Функция LAG обеспечивает доступ к строке с заданным смещением до текущей позиции, а функция LEAD обеспечивает доступ к строке с заданным смещением после текущей позиции ». –