如何在 MySQL 中创建一个出现计数器,每次计数器找到 id 它的出现次数都会增加?
How to create an occurrence counter in MySQL ,each time the counter find the id it occurrence increases?
我想使用 MYSQL 计算每个 ID 在数据库中出现的次数
第一次它读取 ID 100 它给它 1 第五次它给它 5 所以每个 id 的每次出现都是不同的
ID | occurrence
100 | 1
200 | 1
300 | 1
200 | 2
500 | 1
100 | 2
200 | 3
600 | 1
.
理想情况下,您应该有第三列来维护您在上面假设的数据顺序。假设时间戳列 ts
存在,您可以在此处使用 COUNT
作为分析函数:
SELECT ID, COUNT(*) OVER (PARTITION BY ID ORDER by ts) occurrence
FROM yourTable
ORDER BY ts;
假设您的数据类似于:
ID | ts
100 | 2021-01-31 12:00:00
200 | 2021-01-31 13:00:00
300 | 2021-01-31 14:00:00
200 | 2021-01-31 15:00:00
500 | 2021-01-31 16:00:00
100 | 2021-01-31 17:00:00
200 | 2021-01-31 18:00:00
600 | 2021-01-31 19:00:00
此答案还假定您 运行 MySQL 8+,如果不是,请考虑升级。
这是 MySQL 5.7 的版本:
SELECT
ID,
(SELECT COUNT(*) FROM yourTable t2
WHERE t2.ID = t1.ID AND t2.ts <= t1.ts) occurrence
FROM yourTable t1
ORDER BY ts;
我想使用 MYSQL 计算每个 ID 在数据库中出现的次数 第一次它读取 ID 100 它给它 1 第五次它给它 5 所以每个 id 的每次出现都是不同的
ID | occurrence
100 | 1
200 | 1
300 | 1
200 | 2
500 | 1
100 | 2
200 | 3
600 | 1
.
理想情况下,您应该有第三列来维护您在上面假设的数据顺序。假设时间戳列 ts
存在,您可以在此处使用 COUNT
作为分析函数:
SELECT ID, COUNT(*) OVER (PARTITION BY ID ORDER by ts) occurrence
FROM yourTable
ORDER BY ts;
假设您的数据类似于:
ID | ts
100 | 2021-01-31 12:00:00
200 | 2021-01-31 13:00:00
300 | 2021-01-31 14:00:00
200 | 2021-01-31 15:00:00
500 | 2021-01-31 16:00:00
100 | 2021-01-31 17:00:00
200 | 2021-01-31 18:00:00
600 | 2021-01-31 19:00:00
此答案还假定您 运行 MySQL 8+,如果不是,请考虑升级。
这是 MySQL 5.7 的版本:
SELECT
ID,
(SELECT COUNT(*) FROM yourTable t2
WHERE t2.ID = t1.ID AND t2.ts <= t1.ts) occurrence
FROM yourTable t1
ORDER BY ts;