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

合并同一公寓ID的租赁日期范围实现方案咨询

嘿,这个需求其实用基础的SQL聚合逻辑就能轻松搞定,核心思路就是按公寓ID分组,提取最早的入住日期和最终的搬出状态(包含Null)。下面是针对主流数据库的具体实现方案:

实现方案

核心逻辑是按apartment_id分组,通过聚合函数提取目标字段:

1. 通用SQL(适配SQL Server、PostgreSQL、MySQL 8.0+等)

这是最简洁的写法,大多数数据库都支持:

SELECT 
    apartment_id AS Apt_id,
    MIN(Date_of_MovingIn) AS Date_of_MovingIn,
    MAX(Date_of_Movingout) AS Date_of_Movingout
FROM 
    your_rental_table -- 替换成你的实际表名
GROUP BY 
    apartment_id;

逻辑说明

  • MIN(Date_of_MovingIn):直接获取该公寓的首个入住日期,完全匹配需求。
  • MAX(Date_of_Movingout):当分组内存在Null(代表当前仍在租赁)时,MAX()函数会自动返回Null;如果所有记录都有明确搬出日期,就会返回最晚的那个日期,逻辑完全贴合业务场景。

2. 更直白的兼容写法(适配MySQL 5.x等旧版本)

如果你想更明确地控制Null的返回逻辑,可以用条件判断强化:

SELECT 
    apartment_id AS Apt_id,
    MIN(Date_of_MovingIn) AS Date_of_MovingIn,
    CASE 
        WHEN EXISTS (SELECT 1 FROM your_rental_table t2 WHERE t2.apartment_id = t1.apartment_id AND t2.Date_of_Movingout IS NULL)
        THEN NULL
        ELSE MAX(Date_of_Movingout)
    END AS Date_of_Movingout
FROM 
    your_rental_table t1
GROUP BY 
    apartment_id;

这个写法会先检查该公寓是否存在未搬出的记录,存在则直接返回Null,否则取最大搬出日期,逻辑更直观。

测试你的示例数据

用你给出的测试数据代入:

Apt_id Date_of_MovingIn Date_of_Movingout
123456 01.01.2015 30.06.2015
123456 01.07.2015 Null

运行通用SQL后,结果正好是:

Apt_id Date_of_MovingIn Date_of_Movingout
123456 01.01.2015 Null

完全符合你的整合需求!

内容的提问来源于stack exchange,提问作者Tarek85

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:57:35