2

さまざまなソースから自動的に入力されるデータベース テーブルがあります。今、いくつかの重複したエントリがあるという問題があります。

例えば:

  EID  |  TID  |  StartDate  |  EndDate
--------------------------------------------
  1    |  1    |  20.01.2012 |  23.01.2012   
  1    |  2    |  25.01.2012 |  26.01.2012
  1    |  3    |  27.01.2012 |  30.01.2012
  2    |  2    |  20.02.2012 |  23.02.2012
  2    |  2    |  25.01.2012 |  26.01.2012
  3    |  1    |  20.01.2012 |  23.01.2012

ご覧のとおり、EID と TID が同じ行が 2 つあります。私が達成しようとしているのは、日付がより高い行が削除されることです。私が見つけた唯一の回避策は、下位のものだけが選択されるクエリです。

SELECT EID, TID, Min(StartDate), Min(EndDate) FROM Table1 GROUP BY EID, TID 
4

1 に答える 1

3

aCTEROW_NUMBER関数を使用できます。

WITH CTE AS
(
   SELECT EID, TID, StartDate, EndDate,
      RN = ROW_NUMBER() OVER (PARTITION BY  EID, TID ORDER BY StartDate, EndDate)
   FROM Table1 
)
DELETE FROM CTE WHERE RN > 1

デモ

于 2013-03-28T08:48:16.450 に答える