我正在尝试从行号中获取最大金额,而我对此查询感到困惑。
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
);
答案 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;