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

时间:2017-07-25 14:18:16

标签: mysql sql request

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

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

例如:

USER

    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。

这是清楚的吗? 你能帮我吗 ?

1 个答案:

答案 0 :(得分:0)

您需要JOIN两次使用HISTORY表,例如:

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