使用MS Access。我很抱歉标题含糊不清 - 我只是不知道如何描述这是什么类型的问题,我只知道我需要加入两个表或查询来解决它。
我有一个OrgHistory
表,显示每个人(按ID)在某个日期加入的组织(您一次只能成为一个组织的成员):
Person | Org | JoinDate
-----------------------
123 | abc | 3/2/2011
456 | abc | 4/23/1925
123 | def | 5/12/2011
我还有一个Activities
表:
Person | Activity | ActivityDate
--------------------------------
123 | eat | 3/23/2011
123 | sleep | 6/25/2011
456 | walk | 7/20/1985
我想找出Activities
中每个记录,该人在活动当天所属的组织。我认为这可能涉及将JoinDate
值转换为一组范围并将ActivityDate
匹配到适当的间隔,但我对如何设计查询有点困惑 - 在这种情况下 - 如何创建范围并将单个值与范围匹配?
我认为partition()
不会起作用,因为我不是想在已知数量的存储桶中保存多个JoinDate
值。
答案 0 :(得分:5)
我不能保证这是最有效的方式,但它可以在Access中使用您提供的测试数据:
SELECT a.person, a.activity,
(
SELECT TOP 1 org
FROM orghistory AS o
WHERE o.person = a.person
AND o.joindate <= a.activitydate
ORDER
BY o.joindate DESC
) AS Org
FROM activities AS a;