我有一列有两列。一个是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/