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

如何动态减少MONTH1表取数月份,实现12个月数据留存查询?

实现方案

要满足你需求的核心逻辑是:根据MONTH2表中已有的月份数量,动态调整从MONTH1表中获取的月份数,最终合并后始终保留12个月数据。以下是具体的SQL实现思路和代码:

核心逻辑拆解

  1. 统计MONTH2表中已存在的唯一月份数量,记为month2_count。
  2. 从MONTH1表中筛选出最新的(12 - month2_count)个月的数据;当month2_count >= 12时,不再从MONTH1取数。
  3. 将筛选后的MONTH1数据与MONTH2的所有数据合并,确保最终输出恰好12个月的内容。

具体SQL实现(通用版本)

WITH month2_month_count AS (
    -- 统计MONTH2中已有的唯一月份数
    SELECT COUNT(DISTINCT MONTH) AS count
    FROM MONTH2
),
filtered_month1_data AS (
    SELECT 
        MONTH,
        COUNTRY_NAME,
        WEBSITE
    FROM (
        -- 给MONTH1的月份按时间倒序排,标记行号
        SELECT 
            MONTH,
            COUNTRY_NAME,
            WEBSITE,
            ROW_NUMBER() OVER (ORDER BY MONTH DESC) AS row_num
        FROM MONTH1
        GROUP BY MONTH, COUNTRY_NAME, WEBSITE
    ) ranked_month1
    -- 关联MONTH2的统计结果,筛选出需要的月份
    CROSS JOIN month2_month_count
    WHERE row_num <= (12 - month2_month_count.count)
      -- 当MONTH2已有12个月时,MONTH1不再输出数据
      AND month2_month_count.count < 12
)
-- 合并筛选后的MONTH1和全部MONTH2数据
SELECT MONTH, COUNTRY_NAME, WEBSITE FROM filtered_month1_data
UNION ALL
SELECT MONTH, COUNTRY_NAME, WEBSITE FROM MONTH2
GROUP BY MONTH, COUNTRY_NAME, WEBSITE
-- 可选:按月份倒序排列,方便查看最新数据
ORDER BY MONTH DESC;

关键细节说明

  • 月份排序:确保MONTH字段是可按时间排序的格式(如YYYY-MM),否则ORDER BY MONTH DESC无法正确获取最新月份。如果你的MONTH是数字或其他格式,需要调整排序逻辑(比如转换为日期类型)。
  • 去重逻辑:保留了你原查询中的GROUP BY,确保每个(月份、国家、网站)组合唯一。
  • 边界处理:
    • 当MONTH2为空时,自动从MONTH1取最新12个月数据;
    • 当MONTH2有n个月(n<12),MONTH1取最新(12-n)个月,合并后刚好12个月;
    • 当MONTH2满12个月时,MONTH1部分查询返回空,结果仅包含MONTH2的12个月数据。

简化版SQL(无CTE)

如果你的SQL环境不支持CTE,可以用子查询实现:

SELECT MONTH, COUNTRY_NAME, WEBSITE
FROM (
    SELECT 
        MONTH,
        COUNTRY_NAME,
        WEBSITE,
        ROW_NUMBER() OVER (ORDER BY MONTH DESC) AS row_num
    FROM MONTH1
    GROUP BY MONTH, COUNTRY_NAME, WEBSITE
) ranked_month1
WHERE row_num <= (12 - (SELECT COUNT(DISTINCT MONTH) FROM MONTH2))
  AND (SELECT COUNT(DISTINCT MONTH) FROM MONTH2) < 12

UNION ALL

SELECT MONTH, COUNTRY_NAME, WEBSITE
FROM MONTH2
GROUP BY MONTH, COUNTRY_NAME, WEBSITE

ORDER BY MONTH DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:30:39