【问题标题】:Tieing Two "Event Tables" Together with Timestamps SQL QUery将两个“事件表”与时间戳 SQL 查询绑定在一起
【发布时间】:2014-11-01 20:28:07
【问题描述】:

我在 SQL Server 中有两个数据库表。我想要一个查询结果,它将 Operator Name 绑定到另一个表中的行记录。即对于“表 B”中的每一行记录,它将检查事件发生时哪个操作员登录。例外情况是没有操作员登录,因此结果中会有一个空字段。

下面的屏幕截图概述了这两个表格以及示例结果的外观。任何帮助将不胜感激...我在这里不合群。

表A

运营商名称|登录时间|注销时间

汤姆 2014 年 10 月 1 日 12:00 2014 年 10 月 1 日 12:09

迪克 10/01/2014 12:10 10/01/2014 12:35

哈利 10/01/2014 12:40 10/01/2014 12:45

表B

时间戳|事件

10/01/2014 12:03 A

10/01/2014 12:15 B

10/01/2014 12:36 A

要求的查询结果

操作员名称|时间戳|事件名称

汤姆 10/01/2014 12:03 A

迪克 10/01/2014 12:15 B

“无操作员”2014 年 10 月 1 日 12:36 A

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    尝试这样的外部应用:

    SELECT a.OperatorName
        ,b.TIMESTAMP
        ,b.EventName
    FROM tableB b
    OUTER APPLY (
        SELECT ISNULL(a.OperatorName,'No Operator')
        FROM tableA
        WHERE b.TIMESTAMP BETWEEN a.LogOnTime
                AND a.LogOutTime
        ) AS a
    

    【讨论】:

      【解决方案2】:

      我会用明确的left join 来解决这个问题:

      SELECT COALESCE(a.OperatorName, 'No Operator') as Operator, b.TIMESTAMP, b.EventName
      FROM tableB b LEFT JOIN
           tableA a
           ON b.Timestamp BETWEEN a.LogOnTime and a.LogOutTime;
      

      【讨论】:

        猜你喜欢
        • 2023-02-14
        • 1970-01-01
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 1970-01-01
        相关资源
        最近更新 更多