You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 05:37:24