我正在尝试为每个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
问题是我收到的金额不同的多个条目。我只想收到每个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
答案 0 :(得分:4)
从组中删除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
答案 1 :(得分:1)
这可以使用窗口函数来完成,该函数不需要对分组数据进行自联接:
select Finance_Charge_ID,
start_date,
amount
from (
select s.Finance_Charge_ID,
s.start_date,
max(s.start_date) over (partition by s.Finance_Charge_ID) as max_date,
s.Amount
from Service_User_Finance_Charges s
where s.Service_User_ID = 156
) t
where start_date = max_date;
由于窗口功能不需要您使用group by
,您可以在输出中添加所需的任何其他列。