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

Oracle SQL:从重复记录中筛选超过30天未扫描的电脑名

解决Oracle中基于最新扫描日期筛选未扫描电脑的问题

你的原查询错误返回最近已扫描系统的核心原因是:只要某台电脑存在一条符合report_week >= SYSDATE -7且last_scan_date < SYSDATE-30的旧记录,就会被纳入结果,完全忽略了该电脑可能存在的更新扫描记录。要解决这个问题,必须先获取每台电脑的最新扫描日期,再基于这个日期进行判断。

以下是两种适配Oracle环境的可行方案:

方案1:分组聚合获取最新扫描日期

通过GROUP BY按电脑名称分组,用MAX()函数提取每台电脑的最新扫描日期和最新报告周,再筛选符合条件的记录:

SELECT computer_name
FROM (
    SELECT
        computer_name,
        MAX(last_scan_date) AS latest_scan_date,
        MAX(report_week) AS latest_report_week
    FROM scan_table
    GROUP BY computer_name
)
WHERE latest_report_week >= SYSDATE - 7
  AND latest_scan_date < SYSDATE - 30;

方案2:窗口函数筛选最新记录

使用ROW_NUMBER()窗口函数为每台电脑的记录按扫描日期降序排序,取排序后的第一条(即最新记录),再进行条件筛选:

SELECT computer_name
FROM (
    SELECT
        computer_name,
        last_scan_date,
        report_week,
        ROW_NUMBER() OVER (PARTITION BY computer_name ORDER BY last_scan_date DESC) AS rn
    FROM scan_table
)
WHERE rn = 1
  AND report_week >= SYSDATE - 7
  AND last_scan_date < SYSDATE - 30;

方案特点说明

  • 方案1性能更优,适合仅需电脑名称的场景,聚合操作在大数据量下效率更高。
  • 方案2可以保留最新扫描记录的所有字段,方便后续扩展查询需求(比如查看最新扫描的详细信息)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:15:10