2

私はそのように重複している大きなテーブルを持っています:

  • number(主キー)、
  • group(主キー)、
  • Division(主キー)、
  • dateChange

例:

1,2,3,20121015

1,2,3,20120101

1,2,3,20110101

2,2,2,20121010

2,2,2,20120101

結果は次のようになります。

1,2,3,20121015

2,2,2,20121010

「changeDate」が最小の主キーによるグループ化を含む多くの組み合わせを試しましたが、完全に機能するものはないようです。

私はこのようなものが欲しいです:

delete from table where (number,group.devision,changeDate) not in 
(select from table(number,group,devision,Max(changeDate)) 
group by (number,group.devision)

しかし、それが有効なMS-SQL構文だとは思いません。

あなたの助けは大歓迎です!

4

2 に答える 2

4

number, group, Division組み合わせの最新行を除くすべての行を削除します。

;WITH cte
     AS (SELECT ROW_NUMBER() OVER (PARTITION BY number, group, Division 
                                       ORDER BY dateChange DESC) RN
         FROM   YourTable)
DELETE FROM cte
WHERE  RN > 1
于 2012-10-15T15:31:31.790 に答える
0

以下はうまくいくはずです。

delete table from
table inner join (select 
number, group, division, changeDate, row_number() over 
(partition by number, group, division order by changeDate desc) as ranker
from table) Z
on table.number  = Z.number and table.group = Z.group and 
table.changeDate = Z.changeDate and Z.ranker != 1
于 2012-10-15T15:37:19.807 に答える