抱歉,如果您之前未曾回答过该问题,请以各种方式查看,我知道如何并且找不到它。
我有一个这样组织的每周报告表:[pcname],[pcnumber],[username],[date]
我正在尝试检索[pcname]在过去30天内重复3次的记录。由于这些是每周出现,因此在过去4周中有3次出现。每条记录应该显示一次,或重复3次,以后我可以在excel中对其进行过滤(我以后会担心报表和格式设置,只是想立即获取一个有效的查询)。我尝试的所有操作都会得到结果,其中某些行具有重复项(当然,日期除外),但有些行则没有。它们要么全部重复,要么不重复。如果[pcname]相同,但用户名不同,则可能会出现多次,但是,如果除了日期之外的每一列都相同,则应该是3或1,除非其中一列有变化当然不是[pcname]或[date]。
对于背景:该表是个人计算机安全部门每周发送的报告。列表中显示的所有内容均不合规。但是,我们无法解决列表中的所有问题,因为事情过了一天或两天就无法合规,然后始终会自行解决。因此,我们只需要在过去4个星期中有3个星期不符合规定的违规者,就可以让我们知道PC是有问题的孩子。
到目前为止,我拥有的SQL查询是:
SELECT [pcname], [Username], [column], --from server2 [column], --from server2 [column], --from server3 [column], --from server3 [DATE] FROM [server1].database.schema.table1 LEFT JOIN [server2].database.schema.table2 ON Usernamet1 = Usernamet2 LEFT JOIN [server3].database.schema.table3 ON table2.[column] = table3.[column] WHERE [DATE] >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) -28, 0) AND [pcname] IN (SELECT [pcname] FROM [server1].database.schema.table1 GROUP BY [pcname] HAVING COUNT(*) = 3) --WHERE [DATE] >= DATEADD(Day, -60, getdate()) GROUP BY [DATE], [pcname], [Username], [column1], [column2], [column3], [column4] --HAVING COUNT([pcname]) >= 3
如您所见,我留下了其他方法,我将它们注释掉,以防万一您发现它们有用。如果您需要更多信息,请与我们联系。我正在使用SQL Server 2008。
您的查询已经结束,但是您不应该按DATE字段分组,因为这是将多次发生的字段。
DATE
SELECT [pcname], [Username], [column1], [column2], [column3], [column4] FROM [server1].database.schema.table1 LEFT JOIN [server2].database.schema.table2 ON Usernamet1 = Usernamet2 LEFT JOIN [server3].database.schema.table3 ON table2.[column] = table3.[column] WHERE [DATE] >= DATEADD(day, DATEDIFF(day, 0, GETDATE()) -28, 0) GROUP BY [pcname], [Username], [column1], [column2], [column3], [column4] HAVING COUNT(*) >= 3