访问SQL:从另一个表中拉出相关信息

时间:2014-06-26 17:02:52

标签: sql ms-access

此问题涉及以下代码:

SELECT A.`FSR Name` AS [Last Name], 
    Min(A.`ACTUAL TEP IN`) AS [Date In], 
    Max(B.Site) AS Site, 
    Max(B.Position) AS Position,
    Max(B.Comments) AS Comments
FROM Deployments A
INNER JOIN Deployments AS B ON A.ID = B.ID
WHERE A.`Actual TEP In` > Now()
GROUP BY A.`FSR Name`;

此代码的目的是查询每个人今天的第一个日期,并且仅查询该记录。例如,今天之前和之后可能有许多史密斯有日期,我只想用史密斯显示今天之后的记录。这个想法是在级联列表上显示每个人的下一个日期。对于至少那部分,此代码有效。

我遇到的问题是需要与之相关的信息。 Group By force聚合,所以当我对它们执行Min或Max时,我一直在拉错错误的站点/位置/注释字段。我现在真的不确定我应该做什么,因为看起来我有点过头了。任何帮助将不胜感激!

注意:我在Access 2013中这样做。

编辑:添加粗糙表

FSR Name    Date In     Site    Position    Comments
Bob         7/3/2014    A   OP          Notes
Joe         10/11/2013  B   OP  
Joe         8/4/2014    C   OP          Sea
Joe         9/1/2014    D   OP          Dep
Buckley     11/1/2012   A   OP          Transfer
Buckley     10/7/2012   B   OP  
Jones       6/10/2012   A   OP  
Jones       4/27/2013   A   OP          3 Notes
Jones       6/21/2011   B   OP  
Jones       3/26/2012   B   OP          5 Notes
Jones       6/10/2012   C   OP          1 Notes
Jones       3/23/2014   C   OP          2 Notes
Jones       7/5/2014    D   OP          dep
Calvillo    2/21/2014   A   OP  
Calvillo    10/3/2014   B   OP          COM
Calvillo    11/10/2014  A   OP          dep
Casey       5/2/2014    C   OP  

1 个答案:

答案 0 :(得分:1)

SELECT D1.[FSR Name], first(D2.[Date In]), ...
FROM Deployments AS D1 
     LEFT JOIN (select * from Deployments as D3 WHERE D3.[Date In] > Now() ORDER BY D3.[Date In]) as D2 
        ON D1.[FSR Name] = D2.[FSR Name]
group by D1.[FSR Name];

解决方案描述:您正在加入有序列表,first()将返回同一行中的值。 first()聚合函数仅存在于访问中,但其他数据库引擎具有相似的功能,即使没有它也可以处理。