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 连接问题的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 中的 SQL 内部连接

Microsoft Access SQL 查询中的字符串连接问题

从 Access 导入 SQL Server

SQL-Server 后端、MS Access 前端:连接

在 Excel 中使用 Access 数据库中的 SQL 连接行

使用 SQL 在 Access 中的 5 个表上进行内连接和左连接