我有一列有两列。一个是TIMESTAMP,另一个是DIGITAL_BIT
数字位的值可以是0或1,并且在一天中更改几次。一天中的每一分钟都存储在这个表中。我需要知道这个值从0变为1的次数。
是否可以进行返回此更改计数的查询?我的想法是这样的:

select * from mytable where digital_bit = 1 and digital_bit (of previous row) = 0 order by timestamp

这可以通过一个查询完成吗?或者我必须处理程序中的所有数据吗?
谢谢
样品
timestamp | digital_bit

100000    | 0
100001    | 0
100002    | 1
100003    | 1
100004    | 0
100005    | 1
100006    | 0
100007    | 0
100008    | 1

上面应该返回3,因为数字值从0传递到1的时间是数字值的3倍。我需要计算数字值从0到1的频率。

最佳答案

干得好。这将计算数字位从0切换到1的次数(在您的示例中,这将返回3)。

SELECT COUNT(*)
FROM mytable curr
WHERE curr.digital_bit = 1
AND (
    SELECT digital_bit
    FROM mytable prev
    WHERE prev.timestamp < curr.timestamp
    ORDER BY timestamp DESC
    LIMIT 1
) = 0

SQLFiddle link
(原始答案依赖于时间戳是连续的:例如,没有从100001跳到100003。答案现在已更新为不受此限制。)

关于mysql - 计算mysql表中从0到1的值变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19859071/

10-09 03:46