Member 13232347 Ответов: 1

Как получить сравнительные записи из таблицы?


Я хочу получить сравнительные записи из таблицы, в которой я записываю детали покупки различных товаров. Допустим, элемент "ABC", который имеет уникальный идентификатор" 111", купленный много раз для клиента, теперь вопрос в том, как получить последнюю и предыдущую запись для этого элемента для этого конкретного клиента в sql-запросе?

Пример:
ItemCode Дата Сумма ClientID
111 01.01.2017 999 ABC
111 10/03/2017 1050 ABC
111 12/04/2017 1020 ABC

как добраться

Для ClientID=ABC
ItemCode Дата Сумма LastPurchase LastAmount
111 12/04/2017 1020 10/03/2017 1050

Что я уже пробовал:

Разные запросы, но безуспешно. Пробовал разные форумы, но не нашел никакого результата.

1 Ответов

Рейтинг:
2

Richard Deeming

Что-то вроде этого должно сработать:

WITH cteSortedData As
(
    SELECT
        ItemCode,
        Date,
        Amount,
        ClientID,
        ROW_NUMBER() OVER (PARTITION BY ClientID, ItemCode ORDER BY Date DESC) As RN
    FROM
        YourTable
)
SELECT
    ItemCode,
    MAX(CASE RN WHEN 1 THEN Date ELSE Null END) As Date,
    MAX(CASE RN WHEN 1 THEN Amount ELSE Null END) As Amount,
    MAX(CASE RN WHEN 2 THEN Date ELSE Null END) As LastPurchase,
    MAX(CASE RN WHEN 2 THEN Amount ELSE Null END) As LastAmount,
    ClientID
FROM
    cteSortedData
WHERE
    RN In (1, 2)
GROUP BY
    ItemCode,
    ClientID
;