我正在寻找一个我在互联网上找不到的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
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。
这是清楚的吗? 你能帮我吗 ?
答案 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 。