小编典典

SQL Server-查找在过去30天内出现过3次的记录

sql

抱歉,如果您之前未曾回答过该问题,请以各种方式查看,我知道如何并且找不到它。

我有一个这样组织的每周报告表:[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。


阅读 319

收藏
2021-05-16

共1个答案

小编典典

您的查询已经结束,但是您不应该按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
2021-05-16