SQL Server 选择每个 ID 的最大日期

Dav*_*ard 2 sql sql-server greatest-n-per-group

我正在尝试为每个 Finance_charge_id 的每个 service_user_id 选择最大日期记录以及与最高日期相关联的金额

select distinct 
    s.Finance_Charge_ID, MAX(s.start_date), s.Amount  
from
    Service_User_Finance_Charges s
where 
    s.Service_User_ID = '156'
group by 
    s.Finance_Charge_ID, s.Amount
Run Code Online (Sandbox Code Playgroud)

问题是我收到多个金额不同的条目。我只想收到每个 Finance_charge_id 的最近日期的金额

目前我收到以下不正确的信息(第三行不应出现,因为第一行的日期更高)

Finance_Charge_ID   (No column name)    Amount
2                      2014-10-19       1.00
3                      2014-10-16       500.00
2                      2014-10-01       1000.00
Run Code Online (Sandbox Code Playgroud)

Dav*_*idG 5

Amount从组中删除列以获取正确的行。然后,您可以再次将该查询加入到表中以获取您需要的所有数据。以下是使用 CTE 获取最大日期的示例:

WITH MaxDates_CTE (Finance_Charge_ID, MaxDate) AS
(
    select  s.Finance_Charge_ID, 
            MAX(s.start_date) MaxDate
    from Service_User_Finance_Charges s
    where  s.Service_User_ID = '156'
    group by s.Finance_Charge_ID
)

SELECT *
FROM Service_User_Finance_Charges
JOIN MaxDates_CTE 
    ON MaxDates_CTE.Finance_Charge_ID = Service_User_Finance_Charges.Finance_Charge_ID
    AND MaxDates_CTE.MaxDate = Service_User_Finance_Charges.start_date
Run Code Online (Sandbox Code Playgroud)