我需要从列中具有匹配项的表中提取数据。这是我到目前为止所做的,似乎没有用。
SELECT
@@SERVERNAME AS Instance,
DB_NAME() AS [DataBase],
co, id,
changedBy,
oldValue, newValue
FROM
Table1 T1
WHERE
CONVERT(DATE, changeDate) = CONVERT(DATE, GETDATE())
AND column1 = 'name1'
AND column2 IN ('name2','name3')
AND (SELECT COUNT(*) FROM Table1 T2 WHERE T1.newValue = T2.newValue )>3
这是一个由触发器发生的变化组成的表。我需要能够查询此表并撤回符合条件的任何项目。
这是表
的一个例子instance | database | co | id | changedby | oldvalue | newvalue
----------------------------------------------------------------
sql01 | 123 | abc | 01 | user1 | 1234 | 5678
每天可能有数百万种这类记录。我需要撤回的只是4行或更多行中newvalue相同的行。由于这个数据库充满了个人信息(我为一家处理银行业务的公司工作),我正在寻找银行路由和会计可能被欺诈性更改的行。
答案 0 :(得分:1)
您可以使用聚合窗口函数执行此操作:
;with cte as(select *, count() over(partition by newvalue) as rn
from table1
where ...)
select *
from cte
where rn > 3
注意:您应该从where
子句中删除它:
AND (SELECT COUNT(*) FROM Table1 T2 WHERE T1.newValue = T2.newValue )>3