2011-01-04 13 views
0

特定の期間、2つのスーパーバイザにマップされた従業員。従業員が最大期間をマッピングした上司を探す必要があります。 '01/2010'/01 '01/2010'/09/2010' 分の12 '31のSQL Serverクエリ

からスーパーバイザBにマッピング '31/08/2010' スーパーバイザAにマッピング

社員

スーパーバイザーの最長期間は 'A'

これは、SQL Serverのクエリを使用して見つける必要があります。

+0

これまでに書いたコードを投稿してください。人々は一般的にあなたのためのコードを書くのが好きではありません。それはそのままで、これは仕事の説明であり、質問ではありません。 –

+1

いくつかのサンプルデータを作成できるようにDDLを投稿できますか?少なくともあなたのテーブルとデータの一般的な考えを私たちに与えることができるかもしれません。 – codingbadger

+1

テーブル構造を投稿することができます –

答えて

1

DDLがまだ投稿されていないため、これは役立つかもしれません。

Select e.EmployeeName, 
     s.SupervisorName, 
     es.StartDate, 
     es.EndDate, 
     EmpMaxDays.MaxDays as 'TotalNumberOfDaysAssigned' 

From dbo.Employees e 

Left Join dbo.EmployeeSupervisors es on es.EmployeeID = e.EmployeeId 

Left Join 
(
Select Max(DateDiff(day, es.StartDate, es.EndDate)) as 'MaxDays', 
     EmployeeId 
From dbo.EmployeeSupervisor 
Group By EmployeeId 
)EmpMaxDays on es.EmployeeId = EmpMaxDays.EmployeeId 

Left Join dbo.Supervisros s on es.SupervisorId = s.SupervisorId 

Where DateDiff(day, es.StartDate, es.EndDate) = EmpMaxDays.MaxDays 
And es.EmployeeId = EmpMaxDays.EmployeeId 
0

ランク分割を使用することをお勧めします。この方法で、ランク= 1(正しい一致)を選択できます。 hereを参照してください。