【问题标题】:SQL join limiting to 1 row where time is oldest for dateSQL 连接限制为 1 行,其中时间最旧的日期
【发布时间】:2019-06-04 16:07:26
【问题描述】:

我有 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 笔交易;最好是给定日期最晚时间的交易。

【问题讨论】:

标签: sql ms-access adodb


【解决方案1】:

您可以使用相关子查询来获取最新交易。在 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>

【讨论】:

  • 必须在指定日期;查找指定日期的最旧时间。此示例查找所有员工的最早日期
  • @raylward102 。 . .这会找到 每个 员工的最早时间。如果您希望每个员工/日期组合只进行一次交易,则需要一列包含日期。
  • t.date = 日期值; t.out = 时间价值。指定日期可以有2-3个t.out时间;想要捕捉最大的 t.out
  • @raylward102 。 . .大概,您希望每个员工都有这个。如果不是,则删除员工的关联条件。
  • 基本上希望此查询返回一个位置的所有在职员工以及今天日期和最近超时的交易记录。如果今天没有交易,我仍然想要员工,并且可以取消时间。基本上它是今天的出勤记录,显示每位员工 1 行
【解决方案2】:

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

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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多