SQL-запрос для поиска последней цены продажи товара для клиента

Привет, у меня есть следующий набор данных, сгенерированный из базы данных (системы SAP Business One)

Набор данных

Я сгенерировал этот результат, используя следующий запрос:

SELECT T1.[ItemCode], T0.[DocNum], T1.[Price], T0.[CardName] 
FROM OINV T0  INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
GROUP BY T1.[ItemCode], T1.[Price], T0.[CardName],T0.[DocNum]

Я хочу получить последнюю цену каждого товара для каждого клиента. Может ли кто-нибудь помочь мне с этим? Заранее спасибо


person Parmeet Singh    schedule 02.03.2021    source источник
comment
Пожалуйста, предоставьте образец входных и выходных данных. Что такое customer в вашей таблице? :-)   -  person SJNF    schedule 02.03.2021


Ответы (2)


Вы можете использовать row_number()

select * from
(
SELECT T1.[ItemCode], T0.[DocNum], T1.[Price], T0.[CardName],
row_number() over(partition by T0.[CardName],T1.[ItemCode] order by T1.[Price] desc) as rn
FROM OINV T0  INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry]
)A where rn=1
person Fahmi    schedule 02.03.2021

Не следует использовать OINV.CardName, так как в OINV-table могут быть разные имена карт для одного и того же клиента, если вы меняете имя в BP-masterdata, или одно и то же имя для нескольких деловых партнеров. Используйте T0.CardCode или join OCRD on OINV.CardCode и, при необходимости, получите имя от OCRD.

Кроме того, если вы заказываете по цене, вы получаете только самую низкую, но не самую последнюю цену, поэтому, если вы хотите заказать ее, выберите OINV.DocDate DESC или OINV.DocEntry DESC, чтобы получить цену с последней по дате или по добавленному документу.

person Tom79    schedule 31.03.2021