我有一张桌子上面有下面的记录
tableA
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是用户标识。
我可以使用什么样的查询?
发布于 2018-08-28 07:11:48
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;发布于 2018-08-28 06:58:25
如果每个clickid总是最多有两条记录,那么您可以使用:
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') = 1SUM(status = 'act') = 1发布于 2018-08-28 06:58:40
试着做一个连接:
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
https://stackoverflow.com/questions/52051719
复制相似问题