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

如何检测location_info表中地区与地点的跨月映射差异

需求与问题背景

需要排查location_info表中area_name与place_name的映射关系在不同月份(如2023-03与2023-04)是否发生变化,例如Kansas是否从RLT映射变为FLP映射。已知规则:

  • RLT仅对应Kansas/Seattle
  • FLP仅对应Orlando/Tulsa

现有表结构及2023-03的样本数据:

area_nameplace_nameset_report_date
RLTKansas2023-03
RLTSeattle2023-03
FLPOrlando2023-03
FLPTulsa2023-03

此前尝试的SQL语句未能直接定位映射变化:

SELECT area_name, place_name, set_report_date FROM location_info where set_report_date in ('2023-03','2023-04')        (select distinct area_name         FROM location_info);
SELECT distinct place_name, area_name, set_report_date FROM location_info WHERE place_name IN         (SELECT place_name          FROM location_info          WHERE area_name IN ('RLT',FLP')          AND set_report_date in ('2023-03','2023-04'));
SELECT distinct place_name, area_name, set_report_date FROM location_info WHERE area_name IN ('RLT',FLP') AND set_report_date in ('2023-03','2023-04');
解决方案:跨月映射对比SQL

方案1:直接对比两个月的映射差异(含新增/删除场景)

该SQL会列出所有映射变更、新增映射、删除映射的情况,直观展示每个地点的跨月变化:

-- 找出2023-03存在、2023-04映射变化或消失的地点
SELECT
    t1.place_name,
    t1.area_name AS area_202303,
    t2.area_name AS area_202304
FROM
    location_info t1
LEFT JOIN
    location_info t2 
    ON t1.place_name = t2.place_name 
    AND t2.set_report_date = '2023-04'
WHERE
    t1.set_report_date = '2023-03'
    AND (t2.area_name IS NULL OR t2.area_name != t1.area_name)

UNION ALL

-- 找出2023-04新增、2023-03不存在的地点
SELECT
    t2.place_name,
    t1.area_name AS area_202303,
    t2.area_name AS area_202304
FROM
    location_info t2
LEFT JOIN
    location_info t1 
    ON t2.place_name = t1.place_name 
    AND t1.set_report_date = '2023-03'
WHERE
    t2.set_report_date = '2023-04'
    AND t1.area_name IS NULL;

方案2:按地点聚合映射历史,筛选有变化的记录

该SQL会将每个地点的跨月映射历史合并,仅展示存在变化的地点:

SELECT
    place_name,
    GROUP_CONCAT(DISTINCT CONCAT(set_report_date, ':', area_name) ORDER BY set_report_date) AS mapping_history
FROM
    location_info
WHERE
    set_report_date IN ('2023-03', '2023-04')
    AND area_name IN ('RLT', 'FLP')
GROUP BY
    place_name
HAVING
    COUNT(DISTINCT area_name) > 1 OR COUNT(DISTINCT set_report_date) > 1;
原SQL失效原因说明
  • 第一个SQL存在语法错误,WHERE子句后多余的子查询未关联主查询,无法执行逻辑筛选
  • 第二个SQL仅筛选出关联RLT/FLP的地点,但未做跨月映射对比,仅返回原始记录
  • 第三个SQL仅列出两个月内RLT/FLP的所有记录,未对同一地点的跨月映射做对比,无法直接发现变化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:16:59