次のような computers という名前のテーブルがあります。
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
これは私が必要なものを表現する方法です:
LastStartUpDate が最も古い行を削除します。同じ名前の別のコンピューターが存在し、そのコンピューターのプレフィックスが OLDDOMAIN\ または NEWDOMAIN\ のいずれかである場合。
私の質問は次のとおりです。