私の会社のすべてのユーザーを一覧表示するテーブルがあります。各職員がどのように雇用されたかを示す複数のエントリーがあります。SQL Serverの複数の行にまたがる2つの日付間の時間を追加します
RowID UserID FirstName LastName Title StartDate Active EndDate
-----------------------------------------------------------------------------------
1 1 John Smith Manager 2017-01-01 0 2017-01-31
2 1 John Smith Director 2017-02-01 0 2017-02-28
3 1 John Smith CEO 2017-03-01 1 NULL
4 2 Sam Davey Manager 2017-01-01 0 2017-02-28
5 2 Sam Davey Manager 2017-03-01 0 NULL
6 3 Hugh Holland Admin 2017-02-01 1 NULL
7 4 David Smith Admin 2017-01-01 0 2017-02-28
いつでもサービスの長さを教えてくれるクエリを作成しようとしています。
私は自分の情報は、私は複数の行を結合する必要がある時間の経過とともに変化して一人の人間が複数の行で表されているように問題を抱えてい一環...
私はで採用されている者に報告するためのクエリを持っています私が得た限りの時点である。
DECLARE @DateCheck datetime
SET @DateCheck = '2017/05/10'
SELECT *
FROM UsersTest
WHERE @DateCheck >= StartDate AND @DateCheck <= ISNULL(EndDate, @DateCheck)
ここでの本当の課題であるあなたが持つ従業員表を持っている必要があります。雇用日の列。次に別のテーブルにあなたの履歴があります。EmployeePositionのようなもので、そのポジションの開始日と終了日があります。名前が変わります。 –
私はそれを整理する最善の方法として、これまでに別の質問をしました。 RowID、UserID、StartDate、EndDateを除くすべての列を無視するのに役立ちます。この考え方は、提供された日付の値に従って現在のレコードの情報のみを返すことになります。 – Zac
うまくいえば、あなたの最後の質問であなたの正規化を使って設計上の欠陥を指摘してくれたらと思っています。クエリに苦労している理由は、アーキテクチャに欠陥があるためです。これが適切に正規化されていれば、クエリーは非常に簡単になります。 –