首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Status=act值之后找到Status=low值?

如何在Status=act值之后找到Status=low值?
EN

Stack Overflow用户
提问于 2018-08-28 06:49:48
回答 4查看 57关注 0票数 0

我有一张桌子上面有下面的记录

tableA

代码语言:javascript
复制
subid clickid status datetime
1     123     low    2018-07-24 20:20:44
2     123     act    2018-07-24 21:20:44
3     231     act    2018-07-25 20:20:44
4     231     low    2018-07-25 21:20:44
5     789     low    2018-07-26 20:20:44
6     789     act    2018-07-26 21:20:44

我的桌子的例子在上面。

现在我需要找到那些状态= 'low‘,然后是status = 'act’的记录/用户。

我的意思是,点击123和789是我需要的作为我的输出。

首先状态值应该是,然后是act。因为有些记录也在那里,比如首先是status = act,然后是status = low。前clickid=231.但我要status=低那么status = act。前clickid=123&789.

注意:clickid是用户标识。

我可以使用什么样的查询?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-28 07:11:48

代码语言:javascript
复制
SELECT 
*
FROM
(SELECT 
    *
FROM
    tableA
WHERE
    status= 'low') a
    INNER JOIN
(SELECT 
    *
FROM
    tableA
WHERE
    status= 'act') b ON a.clickid = b.clickid where a.datetime < b.datetime;
票数 0
EN

Stack Overflow用户

发布于 2018-08-28 06:58:25

如果每个clickid总是最多有两条记录,那么您可以使用:

代码语言:javascript
复制
SELECT clickid
FROM TableA
GROUP BY clickid
HAVING MIN(CASE WHEN status = 'low' THEN datetime END) <
       MIN(CASE WHEN status = 'act' THEN datetime END)

Demo here

为了确保一个记录是'low‘,另一个是'act’,您可以在HAVING中添加以下谓词

  • SUM(status = 'low') = 1
  • SUM(status = 'act') = 1
票数 2
EN

Stack Overflow用户

发布于 2018-08-28 06:58:40

试着做一个连接:

代码语言:javascript
复制
SELECT t1.clickid 
  FROM tableA AS t1
  JOIN tableA AS t2 
    ON t1.clickid = t2.clickid 
   AND t1.status = 'act'
   AND t2.status = 'low' 
   AND t2.datetime < t1.datetime
GROUP BY t1.clickid

这里还有一个演示:http://sqlfiddle.com/#!9/1f861/1/0

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

https://stackoverflow.com/questions/52051719

复制
相关文章

相似问题

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