Я хочу рассчитать максимальную сумму за ROW_NUMBER - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь получить МАКСИМАЛЬНУЮ сумму из строки № и застрял в этом запросе.

SELECT [Member_Id]
    ,[Picked_Date]
    ,[Location_Number]
    ,[Refill_Amount]
    ,[Total_Refills_Permitted]
    ,[Quantity_Dispensed]
    ,ROW_NUMBER() OVER (
        PARTITION BY Location_Number
        ,Member_Id ORDER BY Member_Id
            ,Picked_Date ASC
        ) AS Row#
FROM DummyTable
WHERE Row# IN (
        SELECT MAX(Row#)
        FROM DummyTable
        );

1 Ответ

1 голос
/ 02 июля 2019

Вы разделяете и заказываете Member_Id.Хотя это разрешено, это неортодоксально, и включение столбца в order by ничего не делает - разве что упорядочивает немного медленнее и, возможно, в некоторых случаях препятствует использованию индекса.

Если вы хотите самую последнюю строку, тогда:

select dt.*
from (select dt.*,
             row_number() over (partition by Location_Number, Member_Id order by Picked_Date desc) as seqnum
      from dummytable dt
     ) dt
where seqnum = 1;

Если вам все еще нужен row#, это действительно количество.Итак, это альтернатива:

select dt.*
from (select dt.*,
             count(*) over (partition by Location_Number, Member_Id) as cnt,
             row_number() over (partition by Location_Number, Member_Id order by Picked_Date desc) as seqnum
      from dummytable dt
     ) dt
where seqnum = cnt;
...