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

基于迁移时间字段的SQL查询 桌子,sql,sql-server,database,database-schema,Sql,Sql Server,Database,Database Schema,数据结构如下所示: [表]成员,包括成员简介 [表]部门,包括会员部门 [表]迁移,记录部门之间的成员迁移 模式 成员 id int 名称字符 部门 id int 名称字符 迁徙 id int 成员id int 部门id int 更新时间日期时间-默认值:当前日期时间 数据示例 成员 1、汤姆 2,加里 部门 1、A 2,B 迁徙 2013-05-01 00:00:00部门A的新成员于2013/05/01加入 2013-05-02 00:00:00部门A的新成员于2013/05/02加入 201

数据结构如下所示:

[表]成员,包括成员简介

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

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

模式 成员 id int 名称字符 部门 id int 名称字符 迁徙 id int 成员id int 部门id int 更新时间日期时间-默认值:当前日期时间 数据示例 成员 1、汤姆 2,加里 部门 1、A 2,B 迁徙 2013-05-01 00:00:00部门A的新成员于2013/05/01加入 2013-05-02 00:00:00部门A的新成员于2013/05/02加入 2013年05月08日00:00:00迁移到B部门 问题 创建成员时,我插入一行以随插入时间迁移表

我可以通过以下方式查询:

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解决方案,感谢您的阅读。

试试以下方法:

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

显示包含列和示例数据的表…感谢您的回答,但我已经可以通过子查询在特定时间获得成员部门。我需要一个答案,输入日期和部门以获得具体的时间。哦,我只需添加加入表的位置以获得具体的部门,非常感谢: