0

我有 2 个要加入的表;我希望员工表中的所有行都能检索事务表中某个日期的最新时间;事务表可以在同一日期有多个员工记录。目前,无法找到将交易限制为最后一条记录的方法(最新输入)

这是一个访问表;Adodb 从 excel 查询访问。

SELECT E.ID, E.Employee, E.lastname, T.in, T.out, T.date, T.type, T.EmployeeID FROM employee E RIGHT JOIN transactions T ON E.ID = INT(T.EmployeeID) WHERE " & _
    "T.date = #" & Format(yesterdate, "Short Date") & "# AND T.type = 'JobCode5' AND E.location = 'EastBuilding' AND E.ID = 89 AND E.stat = TRUE

我希望每位适用员工获得 1 笔交易;最好是在给定日期的最晚时间的交易。

4

2 回答 2

0

子查询完成了这项工作,但运行速度很慢

SELECT E.employee, E.lastname, (SELECT TOP 1 IIF(ISNULL([in]), '', [in]) FROM [transactions] WHERE [date] = #6/3/2019# AND [type] = 'JobCode5' AND INT([EmployeeID]) = E.ID ORDER BY transactions.ID DESC) AS IN_TIME, " & _
        "(SELECT TOP 1 IIF(ISNULL([out]), '', [out]) FROM [transactions] WHERE [date] = #6/3/2019# AND [type] = 'JobCode5' AND INT([EmployeeID]) = E.ID ORDER BY transactions.ID DESC) AS AS_TIME FROM employee E WHERE E.stat = True AND E.location = 'EastBuilding'
于 2019-06-06T17:31:23.507 回答
0

您可以使用相关子查询来获取最新交易。在 MS Access 中处理没有交易的员工有一点技巧:

SELECT E.ID, E.Employee, E.lastname,
       T.in, T.out, T.date, T.type, T.EmployeeID 
FROM employee as E LEFT JOIN
     transactions as T
     ON E.ID = INT(T.EmployeeID) 
WHERE (T.out = (SELECT MAX(t2.out)
                FROM transactions as T2
                WHERE T2.EmployeeID = T.EmployeeID AND
                      T2.Date = T.Date AND
                      T.type = 'JobCode5'
               ) OR
       T.date IS NULL
      ) AND
      <your filters here>
于 2019-06-04T16:12:56.403 回答