You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询需求:筛选同EmployeeID下无提前4分钟EventTypeID=21的EventTypeID=19行

筛选EventTypeID=19且无对应提前4分钟EventTypeID=21关联记录的SQL解决方案

我来帮你搞定这个筛选需求,先明确下核心要求:我们要挑出EventTypeID = 19的记录,同时要排除那些同一EmployeeID下存在一条EventTypeID = 21、且时间恰好比这条19的记录早4分钟的行。结合你现有的查询,我调整出了符合要求的SQL语句,下面一步步说明:

需求回顾

  • 目标记录:EventTypeID = 19
  • 排除条件:同一EmployeeID下,存在EventTypeID = 21的记录,其LoggedOn时间 = 当前19记录的LoggedOn时间 - 4分钟

修改后的查询语句

SELECT *
FROM (
    -- 第一个数据源的日志记录
    SELECT 
        rcp..EventLogEntries.EmployeeID, 
        rcp..EventLogEntries.EventTypeID, 
        rcp..EventLogEntries.TerminalID, 
        rcp..EventLogEntries.LoggedOn 
    FROM rcp..EventLogEntries 
    WHERE rcp..EventLogEntries.terminalid = 3 
    UNION 
    -- 第二个数据源的日志记录,用显式JOIN更清晰,字段别名统一
    SELECT 
        viso..AccessUserPersons.UserExternalIdentifier AS EmployeeID, 
        rcp..EventTypes.ID AS EventTypeID, 
        rcp..Terminals.ID AS TerminalID, 
        viso..EventLogEntries.LoggedOn 
    FROM viso..EventLogEntries
    JOIN viso..AccessUserPersons ON viso..EventLogEntries.PersonID = viso..AccessUserPersons.ID 
    JOIN rcp..Terminals ON viso..EventLogEntries.locationID = rcp..Terminals.TerminalTAID 
    JOIN rcp..EventTypes ON rcp..EventTypes.Code = 36
    WHERE viso..EventLogEntries.LocationID = 10 
      AND viso..EventLogEntries.EventCode = 615
) results
WHERE 
    -- 先筛选出EventTypeID=19的记录
    results.EventTypeID = 19
    -- 排除存在对应提前4分钟的EventTypeID=21记录的行
    AND NOT EXISTS (
        SELECT 1
        FROM results r2
        WHERE r2.EmployeeID = results.EmployeeID
          AND r2.EventTypeID = 21
          AND r2.LoggedOn = DATEADD(minute, -4, results.LoggedOn)
    )
ORDER BY LoggedOn;

关键逻辑说明

  1. 统一结果集:保留了你原有的UNION合并两个数据源的逻辑,把第二个查询的隐式连接改成了显式JOIN(可读性更好),同时给字段加了别名确保和第一个查询的字段名一致,避免歧义。
  2. 筛选目标事件:直接在外部查询的WHERE里过滤出EventTypeID=19的记录。
  3. 排除不符合条件的行:用NOT EXISTS子查询检查,只要同一EmployeeID下有一条EventTypeID=21的记录时间刚好比当前19的记录早4分钟,就把这条19的记录排除掉。
  4. 保留TerminalID:按照你的要求,即使这个字段值始终是3,也保留在输出里满足后续处理的语法要求。

输入输出对比

原始合并结果

EmployeeIDEventTypeIDTerminalIDLoggedOn
2731932018-12-04 12:31:23.000
2732132018-12-04 12:34:18.000
4831932018-12-04 12:40:10.000
2681932018-12-04 13:19:23.000
2732132018-12-04 13:28:00.000
2731932018-12-04 13:32:00.000
4591932018-12-04 15:01:04.000

筛选后的期望输出

EmployeeIDEventTypeIDTerminalIDLoggedOn
2731932018-12-04 12:31:23.000
4831932018-12-04 12:40:10.000
2681932018-12-04 13:19:23.000
4591932018-12-04 15:01:04.000

注:你的期望输出里483的LoggedOn时间写的是2018-12-04 12:30:10.000,应该是笔误,这里以原始输出里的12:40:10.000为准。

内容的提问来源于stack exchange,提问作者siemon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:33:43