我有一个表,其中包含一堆服务器的主机系统信息。每个月,脚本都会使用新的输入日期向表中添加主机和系统信息。同一服务器可能有多个条目,每个条目都有不同的条目。我想要做的是使用查询来查找差异,而不是必须提取数据并以编程方式进行处理。我有两个主要问题:
表名是hostdata,包含字段:hostname TEXT,os TEXT,javaversions TEXT,entrydate TEXT
答案 0 :(得分:2)
您可以将EXISTS与子查询一起使用。这将返回新的主机:
SELECT *
FROM hostdata
WHERE entrydate = 'thismonth'
AND NOT EXISTS (SELECT 1
FROM hostdata AS last
WHERE entrydate = 'lastmonth'
AND last.hostname = hostdata.hostname)
(要删除主机,请交换月份值。)
但是,使用compound query可能更简单:
SELECT hostname
FROM hostdata
WHERE entrydate = 'thismonth'
EXCEPT
SELECT hostname
FROM hostdata
WHERE entrydate = 'lastmonth'
这通常是通过将表连接到自身来完成的,即将上个月的数据与本月的数据相结合:
SELECT last.hostname,
last.os,
last.javaversions,
this.javaversions
FROM hostdata AS last
JOIN hostdata AS this ON last.entrydate = 'lastmonth'
AND this.entrydate = 'thismonth'
AND last.hostname = this.hostname
WHERE last.javaversions <> this.javaversions