如何从 MySQL 数据库中的滚动计数中找到实际计数
How to find actual count from a rolling count in MySQL DB
我有一个table,其中特定数据的计数上升到 5,然后滚动到 0,我想查询显示实际计数的 table,如下所示
期望输出:
Dev_count
Actual_Count
1
1
2
2
3
3
4
4
5
5
0
6
1
7
2
8
3
9
4
10
5
11
0
12
我尝试使用触发器使用以下 SQL 脚本
更新具有实际计数的附加列
CREATE TRIGGER insert_continuous_count BEFORE INSERT ON x_table
FOR EACH ROW SET
NEW.continuous_count = (SELECT continuous_count
FROM x_table
where device_id = NEW.device_id
order by No DESC LIMIT 1
) + 1;
然后我在某处读到触发器无法更新已被调用函数或触发器的语句使用(用于读取或写入)的 table。
有没有更简单的方法来获得所需的输出?
我想你需要这样的东西:
select dev_count,
@row_number:= @row_number + 1 as Actual_Count
from test_tbl
cross join (select @row_number := 0) x;
演示:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/139
在MySQL 8+中你可以使用ROW_NUMBER
函数:
SELECT
dev_count,
ROW_NUMBER() OVER () as rn
FROM test_tbl
ORDER BY rn;
我有一个table,其中特定数据的计数上升到 5,然后滚动到 0,我想查询显示实际计数的 table,如下所示
期望输出:
Dev_count | Actual_Count |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 5 |
0 | 6 |
1 | 7 |
2 | 8 |
3 | 9 |
4 | 10 |
5 | 11 |
0 | 12 |
我尝试使用触发器使用以下 SQL 脚本
更新具有实际计数的附加列CREATE TRIGGER insert_continuous_count BEFORE INSERT ON x_table
FOR EACH ROW SET
NEW.continuous_count = (SELECT continuous_count
FROM x_table
where device_id = NEW.device_id
order by No DESC LIMIT 1
) + 1;
然后我在某处读到触发器无法更新已被调用函数或触发器的语句使用(用于读取或写入)的 table。
有没有更简单的方法来获得所需的输出?
我想你需要这样的东西:
select dev_count,
@row_number:= @row_number + 1 as Actual_Count
from test_tbl
cross join (select @row_number := 0) x;
演示:https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/139
在MySQL 8+中你可以使用ROW_NUMBER
函数:
SELECT
dev_count,
ROW_NUMBER() OVER () as rn
FROM test_tbl
ORDER BY rn;