我想计算每ROW_NUMBER的最大金额

时间:2019-07-02 19:37:29

标签: sql row-number

我正在尝试从行号中获取最大金额,而我对此查询感到困惑。

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 个答案:

答案 0 :(得分:1)

您正在按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;