Access查询问题:筛选最新租期记录仍重复,求逾期租赁协议方案
优化Access逾期租赁协议查询方案
你的SQL目前按Renter_ID和Locker_ID组合分组,所以同一个储物柜如果对应多个租客的租赁记录,会生成多条结果——这就是部分储物柜出现多条记录的原因。根据不同需求,提供两种优化方案:
方案1:每个储物柜仅显示最新的租赁协议(无论租客)
如果你的目标是每个储物柜只保留当前最新的那条租赁记录,再筛选逾期项,可使用子查询关联的方式:
SELECT r.Locker_ID, r.Renter_ID, r.Period_End AS Exp_Date FROM Rental_Agreements AS r INNER JOIN ( -- 先获取每个储物柜的最新租期结束日期 SELECT Locker_ID, MAX(Period_End) AS Max_Period_End FROM Rental_Agreements GROUP BY Locker_ID ) AS latest_rent ON r.Locker_ID = latest_rent.Locker_ID AND r.Period_End = latest_rent.Max_Period_End -- 筛选逾期记录(结束日期早于当前日期) WHERE r.Period_End < Date();
方案2:保留每个租客+储物柜组合的最新协议
如果需要保留每个租客对应储物柜的最新租赁记录,原分组逻辑没问题,但需补充逾期筛选,同时解决同组合下存在相同最大结束日期导致的多条记录问题:
SELECT r.Renter_ID, r.Locker_ID, r.Period_End AS Exp_Date FROM Rental_Agreements AS r INNER JOIN ( -- 获取每个租客+储物柜的最新结束日期 SELECT Renter_ID, Locker_ID, MAX(Period_End) AS Max_Period_End FROM Rental_Agreements GROUP BY Renter_ID, Locker_ID ) AS latest_rent ON r.Renter_ID = latest_rent.Renter_ID AND r.Locker_ID = latest_rent.Locker_ID AND r.Period_End = latest_rent.Max_Period_End -- 筛选逾期记录 WHERE r.Period_End < Date();
关键说明
- 原SQL未添加逾期筛选条件,需通过
WHERE Period_End < Date()过滤出结束日期早于当前的逾期记录。 - 若出现同组合(或同储物柜)下多条记录日期完全相同的情况,可在SELECT后添加
DISTINCT去重。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

