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

Oracle SQL如何从同表拆分数据并关联最新记录生成租户地址

解决apartment_Table地址拼接的SQL问题

不需要用LISTAGG,LISTAGG是用来把同组的多条记录值拼串的,你的需求是分别获取每个ID下最新的CO(公寓号)和WK(道路名),属于行转列的场景,用窗口函数+条件聚合或者PIVOT就能搞定。

具体修正思路

  1. 先给每个ID的不同code类型(WK/CO)标记最新记录:用ROW_NUMBER()窗口函数,按ID+code分组,按update_Date倒序排序,排名为1的就是该类型的最新数据。
  2. 将WK和CO的最新值转为同一行的两个字段,再结合城市、州、邮编拼接完整地址。

示例SQL(条件聚合写法,兼容性更强)

SELECT 
    id,
    MAX(CASE WHEN code = 'CO' AND rn = 1 THEN value END) AS latest_apartment_no,
    MAX(CASE WHEN code = 'WK' AND rn = 1 THEN value END) AS latest_street_name,
    city,
    state_code,
    zip_code,
    -- 按需调整地址拼接格式
    CONCAT(MAX(CASE WHEN code = 'WK' AND rn = 1 THEN value END), ' ',
           MAX(CASE WHEN code = 'CO' AND rn = 1 THEN value END), ', ',
           city, ' ', state_code, ' ', zip_code) AS tenant_address
FROM (
    SELECT 
        id,
        code,
        value, -- 替换为你表中存道路名/公寓号的实际字段
        city,
        state_code,
        zip_code,
        update_date,
        ROW_NUMBER() OVER (PARTITION BY id, code ORDER BY update_date DESC) AS rn
    FROM apartment_Table
) t
WHERE rn = 1
GROUP BY id, city, state_code, zip_code;

用PIVOT的写法(适合Oracle、SQL Server等支持PIVOT的数据库)

SELECT 
    id,
    latest_apartment_no,
    latest_street_name,
    city,
    state_code,
    zip_code,
    CONCAT(latest_street_name, ' ', latest_apartment_no, ', ', city, ' ', state_code, ' ', zip_code) AS tenant_address
FROM (
    SELECT 
        id,
        code,
        value,
        city,
        state_code,
        zip_code,
        ROW_NUMBER() OVER (PARTITION BY id, code ORDER BY update_date DESC) AS rn
    FROM apartment_Table
) t
PIVOT (
    MAX(value) FOR code IN ('CO' AS latest_apartment_no, 'WK' AS latest_street_name)
)
WHERE rn = 1;

注意事项

  • 把SQL里的value替换成你表中实际存储道路名、公寓号的字段名
  • 地址拼接的格式可以根据业务需求调整,比如增减分隔符、调整字段顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:26:00