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

如何用MONTHS_BETWEEN/NTH_VALUE在查询中检测季度报告缺失?

纯SQL实现季度数据缺口检测,无需自定义函数

当然可以用纯SQL逻辑来实现你的需求,完全不需要编写和调用自定义函数。下面是具体的思路和示例代码:

核心思路

  • 筛选最近4条季度记录:针对每个股票代码,按日期降序排序后取最近的4条数据。
  • 计算相邻记录的月份间隔:用LEAD()分析函数获取下一条记录的日期,再通过MONTHS_BETWEEN()计算当前记录与下一条记录的月份差。
  • 检测缺口存在性:检查所有相邻间隔是否都是3个月(正常季度间隔)。如果存在任意一个间隔不等于3,就返回NULL;否则返回完整的季度数据。

示例代码(Oracle SQL)

假设你的表名为stock_quarter_data,包含字段stock_code(股票代码)、report_date(报告日期,格式YYYYMM)、以及其他业务字段(比如revenue、profit等):

WITH ranked_data AS (
    SELECT
        stock_code,
        report_date,
        -- 按日期降序给每个股票的记录排名,1是最新的
        ROW_NUMBER() OVER (PARTITION BY stock_code ORDER BY TO_DATE(report_date, 'YYYYMM') DESC) AS rn,
        -- 获取下一条记录的日期(按降序,所以下一条是更早的季度)
        LEAD(TO_DATE(report_date, 'YYYYMM')) OVER (PARTITION BY stock_code ORDER BY TO_DATE(report_date, 'YYYYMM') DESC) AS next_report_date
    FROM stock_quarter_data
),
gap_check AS (
    SELECT
        stock_code,
        report_date,
        revenue,
        profit,
        -- 计算当前记录与下一条的月份差
        MONTHS_BETWEEN(TO_DATE(report_date, 'YYYYMM'), next_report_date) AS month_diff,
        -- 标记是否存在缺口:只要有一个month_diff不等于3,该股票就标记为有缺口
        MAX(CASE WHEN MONTHS_BETWEEN(TO_DATE(report_date, 'YYYYMM'), next_report_date) != 3 THEN 1 ELSE 0 END) OVER (PARTITION BY stock_code) AS has_gap
    FROM ranked_data
    WHERE rn <= 4 -- 只取最近4条记录
)
SELECT
    stock_code,
    -- 如果有缺口,返回NULL;否则返回对应字段值
    CASE WHEN has_gap = 1 THEN NULL ELSE report_date END AS report_date,
    CASE WHEN has_gap = 1 THEN NULL ELSE revenue END AS revenue,
    CASE WHEN has_gap = 1 THEN NULL ELSE profit END AS profit
    -- 其他业务字段同理添加
FROM gap_check
ORDER BY stock_code, rn;

逻辑说明

  1. ranked_data CTE:给每个股票的记录按日期降序排名,同时用LEAD()窗口函数获取下一条更早的报告日期,为后续计算间隔做准备。
  2. gap_check CTE:计算每条记录与下一条记录的月份差,再用MAX() OVER()窗口函数标记该股票是否存在缺口——只要有一个间隔不等于3,has_gap就会被设为1。
  3. 最终查询:根据has_gap的值决定返回数据还是NULL,确保只要最近4条记录中有任何季度缺口,对应字段就返回NULL。

如果你的需求是只要存在缺口,就让该股票的这4条记录全部返回NULL,逻辑也是完全兼容的,不需要额外调整核心代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:24