3

3列のテーブルがあります

テーブル:StaffDepartmentAssgnment

StaffId         DepartmentId          AssignedFromDate

S1              Dept1                 2013-02-08
S2              Dept1                 2013-02-08
S3              Dept2                 2013-02-01 
S1              Dept2                 2013-02-01

現在 Dept2 にあるすべての StaffId を調べたいのですが、クエリを作成するにはどうすればよいですか?

4

2 に答える 2

3

これはDBエンジンに依存しないソリューションです

select * from 
( 
   select StaffId, max(AssignedFromDate) as adate
   from StaffDepartmentAssgnment 
   group by staffid
) x
inner join StaffDepartmentAssgnment y
      on y.staffid = x.staffid and adate = y.AssignedFromDate
where DepartmentId = 'dept2'

SQLFiddle デモ

于 2013-02-11T12:40:38.047 に答える
2

多分:

SELECT DISTINCT sd.StaffId         
FROM StaffDepartmentAssgnment sd
WHERE sd.DepartmentId = 'Dept2'

アップデート

S1 は現在、Dept2 に所属していません。Dept1 に移動しました。最上位の AssignedFromDate を取得する必要があります。

SQL-Server を使用しCTEているので、ROW_NUMBER関数で a を使用できます。

WITH CTE AS (
    SELECT sd.staffid, sd.DepartmentId,
           rn = Row_number() OVER ( 
                    Partition BY sd.staffid 
                    ORDER BY assignedfromdate DESC) 
    FROM   staffdepartmentassgnment sd) 
SELECT staffid 
FROM   cte 
WHERE  rn = 1 
AND    DepartmentId = 'Dept2'

デモ

于 2013-02-11T12:41:32.837 に答える