我有一张桌子,上面有如下记录
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
上面的表格示例。
现在,我需要找到状态=“低”然后状态=“行动”的那些记录/用户。
我的意思是我的输出需要clickid 123和789。
第一个状态值应低,然后起作用。因为也有一些记录,例如status =首先行动,然后status =低。例如clickid = 231。但我要状态=低然后状态=行动。例如clickid = 123&789。
注意: clickid 是用户标识
我可以为此使用哪种查询?
答案 0 :(得分:2)
如果每个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)
要确保一条记录为“低”记录,而另一条记录为“行为”,则可以将以下谓词添加到HAVING
:
SUM(status = 'low') = 1
SUM(status = 'act') = 1
答案 1 :(得分:1)
尝试加入:
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
答案 2 :(得分:1)
您可以使用自我加入
select a.clickid, a.status, b.clickid, b.status
from tableA a
inner join tableA b on a.clickid = b.clickid
and a.datetime < b.datetime
and a.status = 'low'
and b.status ='act'