如何以某种方式对聚合数据进行分组

How do I group aggregated data a certain way

我有以下样本交易项目收据数据,包括项目、供应商和收据日期:

Item Vendor Receipt_Date
A 1 2021-01-01 00:00:00.000
A 2 2021-01-31 00:00:00.000
B 1 2021-02-01 00:00:00.000
B 2 2021-02-10 00:00:00.000
B 3 2021-02-20 00:00:00.000
C 7 2021-03-01 00:00:00.000

我想 select 每个项目的供应商,基于最后的(最大)收货日期,所以上述示例的预期结果是:

Item Last_Vendor_For_Receipt
A 2
B 3
C 7

我可以对每个项目和供应商的数据进行分组,但我不知道如何通过外部查询实现上述预期结果。我正在使用 SQL Server 2012。这是初始查询:

select
    ir.Item
    ,ir.Vendor
    ,max(ir.Receipt_Date) Last_Receipt_Date
from
    ItemReceipt ir

我在网上和论坛上查过,但很难找到我的具体问题。

谢谢

首先你 select 每个项目所需的最大日期:

select max(Receipt_Date) as max_rcpt_date
,      Item
from   your_unknown_table
group by Item

然后您可以将其用作子查询来获取供应商:

select Item
,      Vendor
from   your_unknown_table   
where  ( Receipt_Date, Item ) in 
             ( select max(Receipt_Date) as max_rcpt_date
               ,      Item
               from   your_unknown_table
               group by Item
             )
   

这将适用于 Oracle。我不确定 SQL-Server 中的 subquery-structure 是否有效。

这是一种使用 TOPROW_NUMBER 的方法:

SELECT TOP 1 WITH TIES *
FROM yourTable
ORDER BY ROW_NUMBER() OVER (PARTITION BY Item ORDER BY Receipt_Date DESC);