Access SQL 连接问题
Posted
技术标签:
【中文标题】Access SQL 连接问题【英文标题】:Access SQL join question 【发布时间】:2011-09-14 21:36:55 【问题描述】:使用 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
值。
【问题讨论】:
我同意您的OrgHistory
表缺少 LeaveDate
属性:您应该在基本表中添加一个新的 LeaveDate
列,添加一个有序键以确保同一个人的期间不能重叠(提示:您需要一个CHECK
约束),然后一次 擦洗数据(@Banjoe 的查询看起来很有希望)。
+1 @onedaywhen - 用于使用休假日期而不是活动/非活动布尔值。许多人不考虑必须回溯历史来寻找会员资格。
【参考方案1】:
我不能保证这是最有效的方法,但它可以在 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;
【讨论】:
谢谢!将最高会员日期设为以上是关于Access SQL 连接问题的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Access SQL 查询中的字符串连接问题