首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查找按一定顺序具有两个历史记录的所有用户。

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

Stack Overflow用户
提问于 2017-07-25 14:18:15
回答 1查看 66关注 0票数 0

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

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

例如:

用户

代码语言:javascript
复制
    id name 
    1 John
    2 Edie
    3 France
    4 Gabriel

5爱伦

历史

代码语言:javascript
复制
    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

代码语言:javascript
复制
    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。

明白了吗?你能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2017-07-25 14:25:18

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

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45306019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档