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

基于pick_date列统计源表与目标表的缺失记录数

基于pick_date列统计源表与目标表的缺失记录数

看起来你需要按日期统计目标表相对于源表缺失的记录数量,也就是每个日期下源表记录数减去目标表记录数的差值(只保留有缺失的日期)。我来帮你梳理解决方案:

首先先明确你的表结构和现有数据:

表结构

create table source_table(sno number,pick_date date);
create table target_table(sno number,pick_Date date);

现有数据

源表(source_table)数据:

snopick_date
112-JAN-23
313-JAN-23
514-JAN-23
614-JAN-23
714-Jan-23
213-JAN-23

目标表(target_table)数据:

SnoPick_date
112-JAN-23
213-JAN-23
514-JAN-23

解决方案SQL

你可以通过统计两个表各日期的记录数,再计算差值来得到结果。这里用CTE(公共表表达式)让逻辑更清晰:

WITH source_counts AS (
    -- 统计源表每个日期的记录数
    SELECT pick_date, COUNT(*) AS source_cnt
    FROM source_table
    GROUP BY pick_date
),
target_counts AS (
    -- 统计目标表每个日期的记录数
    SELECT pick_date, COUNT(*) AS target_cnt
    FROM target_table
    GROUP BY pick_date
)
SELECT 
    -- 格式化日期为你需要的格式
    TO_CHAR(sc.pick_date, 'DD-MON-RR') AS Pick_date,
    -- 计算缺失数:源表数 - 目标表数(目标表无此日期则按0算)
    (sc.source_cnt - NVL(tc.target_cnt, 0)) AS Count
FROM source_counts sc
-- 左连接确保源表的所有日期都被包含
LEFT JOIN target_counts tc ON sc.pick_date = tc.pick_date
-- 只保留有缺失的日期
WHERE (sc.source_cnt - NVL(tc.target_cnt, 0)) > 0
ORDER BY sc.pick_date;

结果说明

执行上面的SQL后,会得到你期望的结果:

Pick_dateCount
13-JAN-231
14-JAN-232

这里的逻辑是:

  1. 先分别统计两个表每个日期的总记录数
  2. 用左连接关联两个统计结果,确保源表的所有日期都不会被遗漏
  3. 用NVL函数处理目标表中不存在的日期(此时目标计数为0),避免出现空值
  4. 计算差值并筛选出差值大于0的行,就是该日期下目标表缺失的记录数

备注:内容来源于stack exchange,提问作者Ram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:54:49