基于迁移时间字段的SQL查询

时间:2013-05-08 07:55:35

标签: sql sql-server database database-schema

数据结构如下:

  • [表]会员,包括会员资料

  • [表]部门,包括会员部门

  • [表]迁移,记录部门之间的成员迁移

模式

  1. 会员
    • id(int)
    • name(char)
  2. 部门
    • id(int)
    • name(char)
  3. 迁移
    • id(int)
    • member_id(int)
    • department_id(int)
    • update_time(datetime) - 默认值:CURRENT_DATETIME
  4. 数据示例

    • 会员
      1. 1,汤姆
      2. 2,Gary
      1. 1,A
      2. 2,B
    • 迁移
      1. 1,1,1,205-05-01 00:00:00(A部门新成员加入2013/05/01)
      2. 2,2,11-05-05 00:00:00(A部门新成员于2013/05/02加入)
      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-05-01'

    我需要一个SQL Server解决方案,感谢您的阅读。

1 个答案:

答案 0 :(得分: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