我有两张桌子。
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的解决方案有效!感谢
答案 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
希望这有帮助!!!