0

テーブル

次のようなデータ構造:

  • [表] メンバー、プロフィールなど

  • 【表】メンバーの部署を含む部署

  • [テーブル] 移行、部門間のメンバー移行を記録

スキーマ

  1. メンバー
    • id (整数)
    • 名前 (文字)
  2. 部署
    • id (整数)
    • 名前 (文字)
  3. 移行する
    • id (整数)
    • member_id (整数)
    • department_id (整数)
    • update_time (日時) - デフォルト: CURRENT_DATETIME

データ例

  • メンバー
    1. 1、トム
    2. 2、ゲイリー
  • デパートメント
    1. 1、あ
    2. 2、B
  • 移行する
    1. 1, 1, 1, 2013-05-01 00:00:00 (2013/05/01 新入部員 A 部)
    2. 2, 2, 1, 2013-05-02 00:00:00 (2013/05/02 新入部員 A 部)
    3. 3、1、2、2013-05-08 00:00:00 (部門 B に移行)

質問

メンバーが作成されたら、時間を挿入して Migrate テーブルに行を挿入します。

次の方法でクエリできます。

SELECT name 
FROM department WHERE id = (SELECT Top 1 department_id 
                            FROM Migrate
                            WHERE update_time <= GETDATE() 
                            ORDER BY update_time DESC)

ユーザーの部署名を取得しています。

また、メンバーが部門 A から部門 B に移行する場合、部門 B の ID と移行時間 (現在) を記録する新しい行を挿入します。

しかし問題は、「2013 年 5 月 1 日」のような特定の時間に部門のメンバー リストを取得するにはどうすればよいかということです。

SQL Server ソリューションが必要です。お読みいただきありがとうございます。

4

1 に答える 1

0

これを試して :

select Members.name , Departments.name  from Members 
inner join

(SELECT max(id) migrateid, member_id 
FROM Migrate
WHERE update_time <= '2013-05-08' 
group by member_id )a

on Members.id=a.member_id

inner join Migrate

on a.migrateid=Migrate.id

inner join Departments

on Departments.id=Migrate.department_id
于 2013-05-08T10:19:55.460 に答える