2017-08-10 12 views
0

私はSQL Server 2008 R2を使用しています。従業員の10001は、時間をかけて一回3回名前を変更し、DODSされていることをSQL:2番目のグループを非順次の日付に基づいて作成するにはどうすればよいですか?

ID   Date  Name   DOD 
10001  200911 Kevin H  06/17/2000 
10001  200912 Kevin  06/20/2000 
10001  201001 Kevin  06/20/2000 
10001  201012 K   06/20/2000 
10001  201101 K   06/20/2000 
10001  201406 Kevin  06/20/2000 

注意:私は、テーブルには、次のような構造とサンプルデータで名前を呼ばれています。私がしようとしているのは、データが日付間で一致するように、ID、名前、およびDODでグループ化することです。私はまた、これらのグループの最小および最大の日付を取得し、日付が順番になることを確認する必要があります。名前またはDODが変更され、それが以前のものに変更された場合は、新しいグループを作成する必要があります。

ので、出力は次のようになります。

EmployeeID MinDate MaxDate Name  DOD 
10001  200911 200911 Kevin H 06/17/2000 
10001  200912 201001 Kevin 06/20/2000 
10001  201012 201101 K  06/20/2000 
10001  201406 201406 Kevin 06/20/2000 

名称テーブルがそうであることに戻ってそこ1ヶ月後、一貫性のないデータは、20ヶ月間の一貫性がある事例、こと、およびなりますかなり大きいです20ヶ月間一貫していた。

ありがとうございました。追加情報が必要な場合はお知らせください。サブクエリを実行し、これがどのように機能するかを確認するには

select employeeid, min(date) as mindate, max(date) as maxdate, 
     name, dod 
from (select t.*, 
      row_number() over (partition by employeeid order by date) as seqnum_d, 
      row_number() over (partition by employeeid, name, dod order by date) as seqnum_dnd 
     from t 
    ) t 
group by employeeid, (seqnum_d - seqnum_dnd); 

答えて

0

あなたは、行番号のアプローチの違いを使用することができます。しばらくの間結果を見ると、この場合行番号の違いが働く理由がわかります。

関連する問題