mysql - SQL 按一定顺序查找具有两个历史记录的所有用户

标签 mysql sql request

我正在寻找一个在互联网上找不到的 SQL 请求(我自己也没有找到解决方案)。

我有两个不同的表用户和历史记录以及链接这两个表的表 user_history。

例如:

<小时/>

用户

    id name 
    1 John
    2 Edie
    3 France
    4 Gabriel

5艾伦

<小时/>

历史记录

    id date_entered type
    1 2017-07-01 36
    2 2017-07-02 52
    3 2017-07-03 25
    4 2017-07-04 69
    5 2017-07-05 85
    6 2017-07-06 74
    7 2017-07-07 45
    8 2017-07-08 85
    9 2017-07-09 25
    10 2017-07-10 78
<小时/>

USER_HISTORY

    id id_user id_history
    1  1  1
    2  1  2
    3  1  3
    4  1  4
    5  2  5
    6  2  6
    7  1  7
    8  1  8
    9  2  9
    10 1  10

在此示例中,所有历史记录均由用户 1 和 2 创建(用户 2 具有历史记录 5,6 和 9)。

所以问题是:

什么 SQL 请求可以让我获得历史记录类型为 25 的所有用户,然后在几天后获得历史记录类型 85?

在此示例中,只有用户 1 (John) 可以,因为他在 2017-07-03 的历史记录类型为 25,然后在 2017-07-08 的历史记录类型为 85。 用户 2 (Edie) 不好,因为即使他有 25 和 85 的历史记录,第一个也是 85 和 25。

清楚了吗? 你能帮我吗 ?

最佳答案

您需要与HISTORYJOIN两次,例如:

SELECT h1.id_user 
FROM (
SELECT u.id_user, h.date_entered
FROM user_history u
JOIN history h ON u.id_history = h.id
WHERE h.type = 25) h1
JOIN (
  SELECT u.id_user, h.date_entered
  FROM user_history u
  JOIN history h ON u.id_history = h.id
  WHERE h.type = 85
  ) h2 ON h1.id_user = h2.id_user
WHERE h1.date_entered < h2.date_entered;

这是SQL Fiddle

关于mysql - SQL 按一定顺序查找具有两个历史记录的所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306019/

相关文章:

node.js - Azure AMS Node js 应用程序无法建立 TLS 1.2 连接

mysql - 如何为 DISTINCT 使用多列?

mysql - 如何使用 phpmyadmin 删除标记为 'in use' 的表

Apache 将所有请求转发到特定的静态文件

sql - 在不知道父行是什么的情况下,删除父行时删除子行的最简单方法是什么?

sql - 如何使用SQL对不同日期进行分组?

javascript - 请求模块 node.js : How add query to GET request?

mysql - 与复杂的查询相反?

mysql - 更新两个表之一中存在的行的值

mysql - 当大量不同的数据发挥作用时,需要支持来正确查询我的数据库