0

桌子

数据结构如下:

  • [表格] 会员,包括会员简介

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

  • 【表】迁移,记录部门间成员迁移

架构

  1. 成员
    • 标识(整数)
    • 名称(字符)
  2. 部门
    • 标识(整数)
    • 名称(字符)
  3. 迁移
    • 标识(整数)
    • member_id (int)
    • 部门 ID(整数)
    • update_time (datetime) - 默认值:CURRENT_DATETIME

数据示例

  • 成员
    1. 1、汤姆
    2. 2、加里
  • 部门
    1. 1、一个
    2. 2、乙
  • 迁移
    1. 1, 1, 1, 2013-05-01 00:00:00 (A部门新成员于2013/05/01加入)
    2. 2, 2, 1, 2013-05-02 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 解决方案,感谢您的阅读。

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 回答