Лучший способ получить MAX клиента в моем коде SQL - PullRequest
1 голос
/ 16 мая 2019

Для каждого продукта мне нужно знать, у какого клиента было доставлено наибольшее количество товаров за определенный период времени. Я хочу, чтобы в моих результатах возвращался только один покупатель из каждого продукта. Я знаю, что я должен использовать МАКС на QtyShip, но я не могу обернуть голову где. В подзапросе?

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

Select o.cono ,
o.ProdId ,
o.CustId ,
c.[name] as 'CustomerName' ,
s.shipto ,
s.[name] as 'ShiptoName' ,
s.user15 as 'divno' ,
o.WhseId ,
SUM(NetAmt) as 'totalNet' ,
SUM(cost) as 'totalCost' ,
SUM(QtyShip) as 'totalQtyShip'
FROM Order_Line_Invoice o
LEFT JOIN ARSC c
    on  o.cono = c.cono
        and o.CustId = c.custno
        and c.insx = 1
LEFT JOIN ARSS s
    on  o.cono = s.cono
        and o.CustId = s.custno
        and o.ShipToId = s.shipto
        and s.insx = 1
GROUP BY o.cono ,
o.ProdId ,
o.CustId ,
c.[name] ,
s.shipto ,
s.[name] ,
s.user15 ,
o.WhseId

Ответы [ 2 ]

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

вы можете использовать row_number (), который поддерживается большинством dbms

    with cte as
    (
    Select o.cono ,
    o.ProdId ,
    o.CustId ,
    c.[name] as CustomerName,
    s.shipto ,
    s.[name] as ShiptoName ,
    s.user15 as 'divno ,
    o.WhseId ,
    SUM(NetAmt) as totalNet ,
    SUM(cost) as totalCost ,
    SUM(QtyShip) as totalQtyShip
    FROM Order_Line_Invoice o
    LEFT JOIN ARSC c
        on  o.cono = c.cono
            and o.CustId = c.custno
            and c.insx = 1
    LEFT JOIN ARSS s
        on  o.cono = s.cono
            and o.CustId = s.custno
            and o.ShipToId = s.shipto
            and s.insx = 1
    GROUP BY o.cono ,
    o.ProdId ,
    o.CustId ,
    c.[name] ,
    s.shipto ,
    s.[name] ,
    s.user15 ,
    o.WhseId
    ),
    cte2 as
   (
   select *,row_number()over(partition by ProdId order by totalQtyShip desc) rn
   from cte
 ) select * form cte2 where rn=1
0 голосов
/ 16 мая 2019

Попробуйте SELECT top 1 (остаток запроса здесь)
, а затем добавьте ORDER BY SUM (QtyShip) Desc в конец

...