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

MySQL 8.0:按多字段分组计算最近两年r值的百分比变化

MySQL 8.0计算分组内最近两年r值的百分比变化

针对你的需求,我们可以利用窗口函数先为每个分组内的记录按年份降序编号,再筛选出最近的两个年份数据,最终计算百分比变化。以下是完整的SQL实现:

WITH ranked_data AS (
    SELECT 
        name,
        zip,
        geom,
        r,
        Year,
        ROW_NUMBER() OVER (PARTITION BY name, zip, geom ORDER BY Year DESC) AS rn
    FROM rg
)
SELECT 
    rd1.name,
    rd1.zip,
    ST_AsText(rd1.geom) AS geom,
    ROUND(((rd1.r - rd2.r) / rd2.r) * 100, 0) AS percentage_change
FROM ranked_data rd1
JOIN ranked_data rd2 
    ON rd1.name = rd2.name 
    AND rd1.zip = rd2.zip 
    AND ST_Equals(rd1.geom, rd2.geom)
    AND rd1.rn = 1 
    AND rd2.rn = 2;

代码说明:

  1. CTE ranked_data:通过ROW_NUMBER()窗口函数,按name、zip、geom分组,每个分组内按Year降序排序,为每条记录分配编号rn——最近的年份编号为1,次近的为2。
  2. 自连接计算变化:将ranked_data自连接,匹配相同分组且rn分别为1和2的记录,用公式((新r值 - 旧r值)/旧r值)*100计算百分比变化,并用ROUND()函数取整。
  3. 几何字段匹配:使用ST_Equals()函数精确匹配geom字段,保证分组逻辑的准确性。

执行查询后将得到预期结果:

name     zip    geom                                      percentage_change
AB, NM   87105  POLYGON ((35.067912 -106.700884))         50

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:25:21