根据表1中发生事件的日期加入2个表,位于表2的开始日期和结束日期之间

时间:2014-04-25 18:10:56

标签: sql sql-server

我有两张桌子。

TableA包含

EventID,日期,经理

TableB包含

经理,部门,日期已开始,截止日期。

在TableB中,经理们经常切换部门,以便看到像

这样的条目

经理1,塔尔萨,1-1-2012,6-1-2012
爱荷华市经理1,2012年6月2日至2012年3月12日至3月31日

可以预料。

我想根据事件发生时经理所在的部门将每个EventID分配给一个部门。

所以例如TableA有

000001,2-1-2012,Manager1

我想要回归 000001,塔尔萨

如果TableA有

000002,8-1-2012,Manager1

我想要回归 000001,爱荷华市

更新: user2034570的解决方案有效!感谢

3 个答案:

答案 0 :(得分:0)

Select Max(EventID),Date, Manager From TableA Group By Date, Manager

答案 1 :(得分:0)

您需要加入FK并在WHERE子句中使用BETWEEN

SELECT A.EventID,B.Department 来自TableA A.    内部联合表B B.       ON A.Manager = B.Manager A.Date BETWEEN B.DateStarted AND B.DateEnded

答案 2 :(得分:0)

假设您有两张桌子:

CREATE TABLE Event(EventID INT, Dates DATE, ManagerName NVARCHAR(20))

CREATE TABLE Manager (ManagerName NVARCHAR(20), Department NVARCHAR(20),
                      DateStarted DATE, DateEnded DATE)

及其中包含的数据(如您所提供):

插入活动价值(1,' 2014-03-25','经理1')

INSERT INTO Manager VALUES('Manager1', 'Tulsa', '2014-03-25', '2014-03-28')
INSERT INTO Manager VALUES('Manager1', 'Iowa City', '2014-01-25', '2014-02-25')

然后,为了获得您正在寻找的数据类型,您必须构建您的查询:

SELECT          event.EventID,
                manager.Department
FROM            Manager manager
INNER JOIN      Event event ON manager.ManagerName = event.ManagerName
WHERE           manager.DateStarted = '2014-03-25'

您可以在此处查看:http://sqlfiddle.com/#!3/612e6/2

您也可以将此查询框架为:

SELECT          event.EventID,
                manager.Department
FROM            Manager manager
INNER JOIN      Event event ON manager.ManagerName = event.ManagerName
WHERE           event.Dates BETWEEN manager.DateStarted AND manager.DateEnded

您可以在此处查看:http://sqlfiddle.com/#!3/612e6/3

您可以根据自己的需要使用这两种中的任何一种。

这两个都会获取结果:

EventID            Department
1               Tulsa

希望这有帮助!!!