ゆっくりと変化する寸法タイプIIの選択に問題があります。私は従業員の技能証明書の実際の長さを選択して、自分の証明書の開始と終了をレポートに表示できるようにしたいと考えています。それについてどうやって行きますか?私は従業員 '80844'のレコードのイメージを含め、予想される結果を記録しています。ゆっくりと変化する寸法タイプから選ぶII
私はMicrosoft SQL Server 2008 R2を使用しています。
ゆっくりと変化する寸法タイプIIの選択に問題があります。私は従業員の技能証明書の実際の長さを選択して、自分の証明書の開始と終了をレポートに表示できるようにしたいと考えています。それについてどうやって行きますか?私は従業員 '80844'のレコードのイメージを含め、予想される結果を記録しています。ゆっくりと変化する寸法タイプから選ぶII
私はMicrosoft SQL Server 2008 R2を使用しています。
興味深い質問をありがとうございました。よく知られている「ギャップと島」の問題です。あなたはそれについての詳細を読むことができますthere。あなたのケースの解決のために
は、次のようになります。
create table #tmp
(
dimEmployeeID int not null,
EmployeeNumber int not null,
Start datetime not null,
[End] datetime not null,
SkillID int not null
)
insert into #tmp values
(386 , 80844, '1900-01-01', '2012-02-28', 14),
(1172, 80844, '2012-02-29', '2012-02-29', 14),
(1173, 80844, '2012-03-01', '2012-04-01', 14),
(1175, 80844, '2012-04-06', '2012-04-12', 14),
(1176, 80844, '2012-04-13', '2012-04-21', 14),
(1172, 80844, '2012-02-29', '2012-02-29', 87),
(1173, 80844, '2012-03-01', '2012-04-01', 87),
(1174, 80844, '2012-04-02', '2012-04-05', 87),
(1175, 80844, '2012-04-06', '2012-04-12', 87)
;with StartingPoints as
(
SELECT EmployeeNumber, SkillID, Start, ROW_NUMBER() OVER(partition by EmployeeNumber, SkillID order by Start asc) AS rn
FROM #tmp AS A
WHERE NOT EXISTS
(
SELECT 1
FROM #tmp AS B
WHERE
A.EmployeeNumber = B.EmployeeNumber
and A.SkillID = B.SkillID
and A.Start - 1 = B.[End]
)
),
EndingPoints AS
(
SELECT EmployeeNumber, SkillID, [End], ROW_NUMBER() OVER(partition by EmployeeNumber, SkillID order by Start asc) AS rn
FROM #tmp AS A
WHERE NOT EXISTS
(
SELECT 1
FROM #tmp AS B
WHERE
A.EmployeeNumber = B.EmployeeNumber
and A.SkillID = B.SkillID
and A.[End] + 1 = B.Start
)
)
SELECT S.EmployeeNumber, S.SkillID, S.Start, E.[End]
FROM StartingPoints AS S
JOIN EndingPoints AS E
ON
S.EmployeeNumber = E.EmployeeNumber
and S.SkillID = E.SkillID
and S.rn = E.rn
ありがとう、これは素晴らしいです。これは私が探しているものです –
使用しているデータベースのどのタイプ? –
私はMicrosoft SQL Server 2008 R2を使用しています。 –
結果がどのように決定されるのか分かりません。なぜ結果の最初の行に2012-04-01の終了日がありますか? – fancyPants