MariaDB时序事件表运行状态计算方法技术问询
在MariaDB中计算时序事件表的运行状态
我需要在MariaDB中为时序事件表的每一行计算运行事件状态(0表示停止,1表示运行)。给定id、start_event和stop_event字段,需计算event_state字段以标识当前运行状态。存在大量冗余启停事件时,仅由最近的前置事件决定当前状态,规则如下:
event_state初始值为0;- 若
start_event为1且stop_event为0,当前状态为运行(1); - 若
start_event为0且stop_event为1,当前状态为0; - 若
start_event和stop_event均为1,当前状态视为停止(0); - 若
start_event和stop_event均为0,当前状态与上一行event_state一致。
示例:
| id | start_event | stop_event | event_state |
|---|---|---|---|
| 10 | 0 | 1 | 0 |
| 9 | 0 | 0 | 0 |
| 8 | 0 | 1 | 0 |
| 7 | 0 | 0 | 1 |
| 6 | 0 | 0 | 1 |
| 5 | 0 | 0 | 1 |
| 4 | 1 | 0 | 1 |
| 3 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 0 | 0 | 0 | 0 |
以下是已填充正确event_state值的表结构及数据,需重新计算该字段:
DROP TABLE IF EXISTS `table1`; CREATE TABLE `table1` ( `id` BIGINT, `start_event` BIT, `stop_event` BIT, `event_state` BIT, PRIMARY KEY (`id`) ); INSERT INTO `table1` SELECT 10, 0, 1, 0 UNION ALL SELECT 9, 0, 0, 0 UNION ALL SELECT 8, 0, 1, 0 UNION ALL SELECT 7, 0, 0, 1 UNION ALL SELECT 6, 0, 0, 1 UNION ALL SELECT 5, 0, 0, 1 UNION ALL SELECT 4, 1, 0, 1 UNION ALL SELECT 3, 0, 0, 0 UNION ALL SELECT 2, 0, 1, 0 UNION ALL SELECT 1, 0, 1, 0 UNION ALL SELECT 0, 0, 0, 0; SELECT * FROM `table1` ORDER BY `id` DESC;
内容的提问来源于stack exchange,提问作者Michael B. Currie
相关产品推荐
相关产品推荐

