如何返回满足特定事件序列的行?

2023-12-30

我正在尝试提取满足特定事件序列的 UserID 的记录。如果用户有一个 JOIN,然后是一个后续的 CANCEL,然后是一个后续的 JOIN,我想在结果集中返回它们。我需要根据需要一次运行此查询一天,或一次运行几天。

下表显示了满足和不满足该顺序的 UserID 的示例。

+--------+--------+---------------------+------------+------------------+
| rownum | UserID |      Timestamp      | ActionType | Return in query? |
+--------+--------+---------------------+------------+------------------+
|      1 |  12345 | 2016-11-01 08:25:39 | JOIN       | yes              |
|      2 |  12345 | 2016-11-01 08:27:00 | NULL       | yes              |
|      3 |  12345 | 2016-11-01 08:28:20 | DOWNGRADE  | yes              |
|      4 |  12345 | 2016-11-01 08:31:34 | NULL       | yes              |
|      5 |  12345 | 2016-11-01 08:32:44 | CANCEL     | yes              |
|      6 |  12345 | 2016-11-01 08:45:51 | NULL       | yes              |
|      7 |  12345 | 2016-11-01 08:50:57 | JOIN       | yes              |
|      1 |   9876 | 2016-11-01 16:05:42 | JOIN       | yes              |
|      2 |   9876 | 2016-11-01 16:07:33 | CANCEL     | yes              |
|      3 |   9876 | 2016-11-01 16:09:09 | JOIN       | yes              |
|      1 |  56565 | 2016-11-01 18:15:16 | JOIN       | no               |
|      2 |  56565 | 2016-11-01 19:22:25 | CANCEL     | no               |
|      3 |  56565 | 2016-11-01 20:05:05 | CANCEL     | no               |
|      1 |  34343 | 2016-11-01 05:32:56 | JOIN       | no               |
+--------+--------+---------------------+------------+------------------+

我阅读了有关差距和岛屿的内容,并查看了各种复杂的论坛帖子,这些帖子围绕着我想要实现的目标跳舞。

目前,我所能做的就是查看一天的记录,对我需要的序列逻辑没有限制:

SELECT
    ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY tmsmp) rownum
    ,UserID
    ,tmstmp
    ,ActionType
FROM
    t
    INNER JOIN  (
                SELECT UserID
                FROM t
                WHERE tmstmp BETWEEN '2016-11-20 00:00:01' AND '2016-11-20 11:59:59'
                GROUP BY UserID
                HAVING COUNT(*) >= 2
                ) AS sub ON t1.UserID = sub.UserID

谢谢您的意见!


您可以使用LEAD() :

SELECT * FROM (
    SELECT t.* ,
           LAG(t.ActionType,1) OVER(PARTITION BY t.userid ORDER BY t.timestamp) AS LAST_ACTION,
           LAG(t.ActionType,2) OVER(PARTITION BY t.userid ORDER BY t.timestamp) AS LAST_ACTION2,
           LEAD(t.ActionType,1) OVER(PARTITION BY t.userid ORDER BY t.timestamp) AS NEXT_Action,
           LEAD(t.ActionType,2) OVER(PARTITION BY t.userid ORDER BY t.timestamp) AS NEXT_Action2
    FROM YourTable t
    WHERE tmstmp BETWEEN <Start> AND <End>)
WHERE (t.actionType = 'JOIN' AND
      t.NEXT_Action = 'Cancel' AND
      t.NEXT_Action2 = 'JOIN')
  OR (t.LAST_ACTION= 'JOIN' AND
      t.actionType= 'Cancel' AND
      t.NEXT_Action = 'JOIN')
  OR (t.LAST_ACTION2= 'JOIN' AND
      t.LAST_ACTION = 'Cancel' AND
      t.actionType= 'JOIN')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何返回满足特定事件序列的行? 的相关文章

随机推荐

  • 可以用“and”、“or”等代替“&&”、“||”吗?

    我已经习惯了and and orC 中的关键字 我一直在使用它们 并且打字对我来说既快速又舒适 我听说这些别名是非标准的 可能不适用于所有编译器 但我不确定 我真的不知道这是不是真的 假设我把我的代码交给某人 他在编译时会遇到问题吗 我用的
  • 语句handle(hstmt)到底是做什么的?在 ODBC 中

    我是为 ODBC 编写 C 代码的新手 但在这里我有一个问题 在搜索了 C 的 odbc 函数教程的教程后 我仍然无法准确地得到 他们如何协作 该语句处理 hstmt 对数据库数据到底有什么作用 我知道它控制我作为参数提供的 SQL 查询语
  • 如何将唯一数字附加到字符串列表

    我有这个函数 它可以工作并给出正确的结果
  • 忽略精灵透明区域的像素完美碰撞

    我最近从这个链接中发现了两个精灵之间的像素完美碰撞 http www cocos2d iphone org forum topic 18522 http www cocos2d iphone org forum topic 18522 我只
  • git diff,显示删除和添加的同一行

    我不小心在master上工作 在那里我不得不开设一个新的分支 我几乎把它完全恢复到原来的样子 在一节课上 我得到了以下我无法理解的差异 index 4a9abb8 7c55879 100755 a includes site inc php
  • 将 proguard 与 espresso/androidTest 一起使用

    我正在尝试配置 proguard 以将其与我的 espresso UI 测试风格一起使用 问题是 Proguard 倾向于忽略我的调试 proguard 配置 配置如下 buildTypes debug minifyEnabled true
  • Keras中的自定义损失函数,如何处理占位符

    我正在尝试在 TF Keras 中生成自定义损失函数 如果损失函数在会话中运行并传递常量 则该损失函数可以工作 但是 当编译到 Keras 中时 它会停止工作 成本函数 感谢 Lior 将其转换为 TF def ginicTF actual
  • 水平 recylerview 与 viewpager 滚动同步滚动

    我有一个带有一些值的视图寻呼机 与 recyclerview 上方的 recyclerview 的计数相同 就像 tablayout 一样 我已经使用 snap helper 实现了该功能 并且一切正常 我唯一想要的就是我想将 recycl
  • 无法使用 PowerShell 从远程服务器访问环境变量

    我有一个脚本来查询远程 Windows 服务器列表 以检索我创建的环境变量的值 我可以看到该变量确实存在 因为当我打印所有变量时我可以看到它 EnvObj try Name MY VAR VerbosePreference Continue
  • Typo3 ke_search 扩展致命错误

    我对 Typo3 还很陌生 如果我不明白这里的问题是什么 我很抱歉 我安装了扩展 ke search 并遵循 很多次 给出的基本和简单的说明 https www typo3 macher de en facetted search ke s
  • 将 json 解组为类型

    我得到以下数据 timestamp 1526058949 bids 7215 90 2 31930000 7215 77 1 00000000 通过 websocket 我想将其解组到 type OrderBookItem struct P
  • 如何为 Linux、OS X、Windows 制作 Travis CI 测试包?

    有没有办法告诉 Travis CI 或其他持续集成服务 在不同的操作系统上测试包 使用文件系统 最好仔细检查它是否与平台无关 Update 3 Windows 支持已发布 您现在可以在 Linux macOS 和 Windows 上使用 T
  • 将 vue 组件传递给子组件

    我正在尝试创建一个 Vue 组件 该组件将接受组件作为参数来显示数据 但我无法弄清楚如何使其工作 如果我全局注册显示组件 使用 Vue component 它可以工作 但如果我在本地注册它 则会出现以下错误 Vue warn Unknown
  • Android 任务管理器或系统对话框

    我想知道有没有一种方法可以在显示系统对话框时获取事件 例如任务管理器 关闭警报 我可以通过如下意图从我的活动中关闭系统对话框 Intent closeDialog new Intent Intent ACTION CLOSE SYSTEM
  • 如何查找一个方法中调用的所有方法?

    如何在特定方法中调用其他类的方法 EXAMPLE 方法 getItem1 public String getItem1 throws UnsupportedEncodingException String a 2 a getBytes a
  • 去掉chart js折线图中的竖线

    I am using Chart js to generate maps and have customised it to a good extent But I am not able to remove the vertical gr
  • 鼠标悬停在 html 上更改图像

    我试图让图像在鼠标悬停时发生变化 这段代码适用于 IE 但不适用于其他浏览器 如 chrome opera safari 等 有什么想法吗 a href img src img login button 11 jpg a 您应该使用 ID
  • JavaScript 触发 InputEvent.isTrusted = true

    我正在尝试自动化一些任务JavaScript我需要使用InputEvent 但是当我使用正常事件时 我得到事件 isTrusted false而我的活动什么也没做 这是我的事件代码 var event new InputEvent inpu
  • JavaScript:通过类方法创建和销毁类实例

    我试图弄清楚如何通过类方法删除对象 我希望能够创建一个具有从内存中释放对象的 destroy 方法的类 到目前为止 我所做的研究还没有结论 我知道垃圾收集最终会处理该对象 但我想要一种更明确的方法来销毁它 这可能吗 class constr
  • 如何返回满足特定事件序列的行?

    我正在尝试提取满足特定事件序列的 UserID 的记录 如果用户有一个 JOIN 然后是一个后续的 CANCEL 然后是一个后续的 JOIN 我想在结果集中返回它们 我需要根据需要一次运行此查询一天 或一次运行几天 下表显示了满足和不满足该