我有一个名为 computer 的表,如下所示:
DomainPrefixedComputername | LastStartUpDate
OLDDOMAIN\Computer1 |2012-01-25
OLDDOMAIN\Computer2 |2012-02-20
OLDDOMAIN\Computer3 |2012-03-03
OLDDOMAIN\Computer4 |2012-04-15
OLDDOMAIN\Computer5 |2012-12-18
\Computer1 |2012-01-27 (computer was inserted when it had no domain affinity)
NEWDOMAIN\Computer1 |2012-02-01
NEWDOMAIN\Computer2 |2012-02-22
NEWDOMAIN\Computer3 |2012-03-23
一个进程要么插入新的 DomainPrefixedComputers,要么更新现有的。无法更改进程或数据库。
如果另一个域中有匹配的计算机,我正在尝试做的是删除包含具有最旧 LastStartUpDate 的计算机的行。由于计算机可能被放回旧域中,因此仅删除以 OLDDOMAIN 为前缀的行是不够的。我也不想删除有利于非前缀计算机的行。
以下语句为我提供了无前缀计算机的列表,以及找到的计算机数量:
SELECT
Replace(
Replace(
Replace(DomainPrefixedComputername, 'NEWDOMAIN\', '')
, 'OLDDOMAIN\', '' )
, '\', '' ) AS TempDomainPrefixedComputername
, Count(DomainPrefixedComputername) AS _count_
FROM Computers
GROUP BY
Replace(
Replace(
Replace(DomainPrefixedComputername, 'NEWDOMAIN\', '')
, 'OLDDOMAIN\', '' )
, '\', '' )
产量:
TempDomainPrefixedComputername | _count_
Computer1 | 3
Computer2 | 2
Computer3 | 2
Computer4 | 1
Computer5 | 1
这就是我表达我需要的方式:
如果存在另一台具有相同名称的计算机且另一台计算机的前缀为 OLDDOMAIN\ 或 NEWDOMAIN\ ,则删除具有最旧 LastStartUpDate 的行。
我的问题是:我怎样才能完成我想要的?