MySQL匹配两列返回第三列值:时间序列同比计算实现
解决MySQL时间序列同比匹配问题
没问题,我来帮你搞定这个同比计算的SQL语句!要实现通过prev_year_code匹配current_month_code获取去年同期的value,最直接的方式是用自连接(把表和自身关联起来),这样就能把当前行和对应的去年同期行绑定在一起。
核心SQL语句示例
假设你的表名为time_series_data,可以参考这个写法:
SELECT t1.date AS current_date, t1.value AS current_value, t2.value AS prev_year_value, -- 去年同期的数值 t1.intermodal_id, t1.current_month_code, t1.prev_year_code FROM time_series_data t1 LEFT JOIN time_series_data t2 ON t1.prev_year_code = t2.current_month_code AND t1.intermodal_id = t2.intermodal_id; -- 确保同一主体的同期数据匹配
关键细节说明
- 自连接逻辑:用
t1指代当前数据行,t2指代去年同期的行。通过prev_year_code和current_month_code的相等关系,精准定位对应的去年数据。 - 连接类型选择:
- 用
LEFT JOIN会保留所有当前行,哪怕某行没有对应的去年数据(此时prev_year_value会显示NULL),适合需要完整数据集的场景。 - 如果只需要有同期匹配数据的行,把
LEFT JOIN改成INNER JOIN即可。
- 用
intermodal_id关联的必要性:加上这个条件是为了避免不同主体(不同intermodal_id)的code巧合重复导致匹配错误,让关联逻辑更严谨。如果你的current_month_code已经包含了intermodal_id的唯一标识(比如unique_id就是intermodal_id),这个条件也可以省略,但建议保留以保证数据准确性。
内容的提问来源于stack exchange,提问作者Z.Mack
相关产品推荐
相关产品推荐

