我想计算某个值在特定值之前出现的次数
下面是我的起始表
+-----------------+--------------+------------+
| Id | Activity | Time |
+-----------------+--------------+------------+
| 1 | Click | 1392263852 |
| 2 | Error | 1392263853 |
| 3 | Finish | 1392263862 |
| 4 | Click | 1392263883 |
| 5 | Click | 1392263888 |
| 6 | Finish | 1392263952 |
+-----------------+--------------+------------+
我想计算在完成之前发生了多少次点击。 我有一个非常迂回的方法来做到这一点,我编写一个函数来查找最后一个 完成的事件并查询完成之间的点击次数。 对于错误也重复此操作。
我想要实现的是下表
+-----------------+--------------+------------+--------------+------------+
| Id | Activity | Time | Clicks | Error |
+-----------------+--------------+------------+--------------+------------+
| 3 | Finish | 1392263862 | 1 | 1 |
| 6 | Finish | 1392263952 | 2 | 0 |
+-----------------+--------------+------------+--------------+------------+
这张表很长,所以我正在寻找一个有效的解决方案。 如果有人有任何想法。
谢谢!
最佳答案
这是一个复杂的问题。这是解决该问题的方法。 “完成”记录之间的组需要通过为它们分配组标识符来标识为相同。该标识符可以通过计算id
较大的“完成”记录的数量来计算。
分配后,可以使用聚合来计算结果。
可以使用相关子查询来计算组标识符:
select max(id) as id, 'Finish' as Activity, max(time) as Time,
sum(Activity = 'Clicks') as Clicks, sum(activity = 'Error') as Error
from (select s.*,
(select sum(s2.activity = 'Finish')
from starting s2
where s2.id >= s.id
) as FinishCount
from starting s
) s
group by FinishCount;
关于MySQL - 计算其他值之间出现的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21745029/