1

次のような 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\ のいずれかである場合。

私の質問は次のとおりです。

4

1 に答える 1

1

これを試してください: (私の例では、列名は DomainPrefixedComputername > dom, LastStartUpDate > dt です) SQL-Fiddle-Demo は次のとおりです。

;with cte as (
  select dom,dt, 
  case when charindex('\',dom,1)=1 then 0 else 1 end hasDom,
  row_number() over (partition by 
                     substring(dom,charindex('\',dom,1)+1,len(dom)) 
                     order by dt desc) rn                   
  from T
)
delete from cte where rn<>1 and hasDom = 1


--Select * results after deleting
|                 DOM |         DT |
------------------------------------
| OLDDOMAIN\Computer4 | 2012-04-15 |
| OLDDOMAIN\Computer5 | 2012-12-18 |
|          \Computer1 | 2012-01-27 |
| NEWDOMAIN\Computer1 | 2012-02-01 |
| NEWDOMAIN\Computer2 | 2012-02-22 |
| NEWDOMAIN\Computer3 | 2012-03-23 |
于 2013-02-15T09:15:45.637 に答える