使用SQL从Access数据库中选择记录对

时间:2015-08-08 04:36:08

标签: sql excel vba ms-access

我正在尝试使用Excel VBA使用SQL语句从访问数据库中提取记录。 将Excel VBA与SQL SELECT语句一起使用我可以使用WHERE子句提取记录。 现在我试图从我的数据库中选择记录对,但我不知道如何实现这一点。

访问表:(注意:表中还有其他列)

n

我想根据名称选择对

E.g。

     Date    DTE    Name    Sc
    41668   AAA425  AdamJ   98
    41669   ABC500  JohnB   85
    41689   ADE450  AdamJ   56
    41789   AFF350  AdamJ   74

然后我想基于第一个DTE过滤/选择

Date  DTE     Name  Sc  Date   DTE     Name   Sc
41668 AAA425  AdamJ 98  41689  ADE450  AdamJ  56
41668 AAA425  AdamJ 98  41789  AFF350  AdamJ  74
41689 ADE450  AdamJ 56  41789  AFF350  AdamJ  74

有人能指出我如何实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

我不完全明白你想做什么(或更多),但你可以用这样的事情做到:

选择您的主要驾驶记录:

select max(date),
       name
  from NameDates (or whatever you called your table)
 group by name;

这样就可以为每个人提供最新记录。

现在将该选择加入同一个表中的另一个选择:

with mainName as
(select max(date) as main_date,
        name as main_name
   from NameDates (or whatever you called your table)
  group by name
)
select main_date,
       main_name,
       date,
       name,
       sc
  from mainName,
       NamesDates
 where main_name = name
   and main_date != date;

检查它在这里工作:

http://sqlfiddle.com/#!4/321b3/8

答案 1 :(得分:0)

是的,可以使用ACCESS SQl进行ACCESS,如下所示:

假设您的数据保存在NamesDates表中。

select mainName.main_date,
       mainName.main_name,
       NamesDates.date,
       NamesDates.name,
       NamesDates.sc, 
       NamesDates.StudentID
  from NamesDates
       LEFT JOIN 
       (select max(date) as main_date,
               StudentID AS main_StudentID
          from NameDates 
          group by StudentID
       ) AS mainName,
       ON mainName.main_StudentID = NamesDates.StudentID
 where  mainName.main_date != NamesDates.date;

您根据名称匹配记录的请求是不常见的,因为名称通常不是唯一的。通常,该人的唯一标识符将用于将记录与创建的对匹配。

PS。我怀疑你需要使用" min(date)"不是"最大(日期)"

此外,听起来您需要在主查询和子查询上添加WHERE子句,以将日期限制为您提到的90天。

哈维