我正在尝试运行一个查询,该查询从一个表中选择任何计算机名,该表满足30天内未扫描的条件。理论上,SYSDATE - 30是理想的,但这里的挑战是每个系统可能有重复的条目。
因此,在下面的查询中,我从一个表中选择计算机,其中报告周是本周,而上次扫描是在30多天前。因为此系统本周有多个条目,所以它返回在30天内进行过扫描的系统。因为一个记录显示本周已扫描,而另一个记录显示未扫描。
SELECT DISTINCT
computer_name
FROM
scan_table st
WHERE
report_week >= SYSDATE - 7
AND
st.last_scan_date < SYSDATE - 30
它返回x system,即使x system是昨天扫描的,因为重复的记录表明x system上次扫描是在2月。
是的,显而易见的答案是从数据库中清除重复的数据,但这不是一个选项,所以我需要一种方法来根据last_scan_date列中可用的最新日期进行过滤。
我尝试使用MAX(st.last_scan_date),但是不允许在WHERE子句中使用它。我看到建议使用SELECT子查询的结果,但是,这只是将这个问题带回。除非我错误地使用子查询
我使用的是ORACLE SQL DEVELOPER。
2条答案
按热度按时间lsmepo6l1#
如果您的目标是
report_week
和last_scan_date
的最新值,则可以使用聚合并在HAVING
子句中设置条件:dojqjjoe2#
您可以使用exists来过滤掉同一台计算机以前的扫描。
此外,您还可以看到实际的最后扫描日期。