我需要查找并标记数据条目,从 mysql 一小时内的第三个开始算起

I need to find and mark data entries, counting from the third within an hour on mysql

我有一个记录用户交互的数据库。预计每位用户每小时 2 次(00-59 分钟),任何超过的都应标记为额外。以下 table 表示我试图通过更新 'extra' 列来实现的结果。知道我会怎么做吗?

id user timestamp extra
1 1 2021-05-18 15:46:18 0
2 2 2021-05-18 15:41:18 1
3 2 2021-05-18 15:38:18 1
4 2 2021-05-18 15:19:18 0
5 2 2021-05-18 15:12:18 0
6 1 2021-05-18 14:46:18 0
7 2 2021-05-18 14:46:18 0
8 2 2021-05-18 14:13:18 0
9 1 2021-05-18 12:58:18 1
10 2 2021-05-18 12:46:18 0
11 1 2021-05-18 12:13:18 0
12 1 2021-05-18 12:01:18 0

您可以将 RowNUMBER 用于按用户分区和每小时时间戳

CREATE TABLE table1 (
  `id` INTEGER,
  `user` INTEGER,
  `timestamp` DATETIME,
  `extra` INTEGER
);

INSERT INTO table1
  (`id`, `user`, `timestamp`, `extra`)
VALUES
  ('1', '1', '2021-05-18 15:46:18', '0'),
  ('2', '2', '2021-05-18 15:41:18', '0'),
  ('3', '2', '2021-05-18 15:38:18', '1'),
  ('4', '2', '2021-05-18 15:19:18', '0'),
  ('5', '2', '2021-05-18 15:12:18', '0'),
  ('6', '1', '2021-05-18 14:46:18', '0'),
  ('7', '2', '2021-05-18 14:46:18', '0'),
  ('8', '2', '2021-05-18 14:13:18', '0'),
  ('9', '1', '2021-05-18 12:58:18', '0'),
  ('10', '2', '2021-05-18 12:46:18', '0'),
  ('11', '1', '2021-05-18 12:13:18', '0'),
  ('12', '1', '2021-05-18 12:01:18', '0');
UPDATE table1 t1
JOIN (SELECT
`id`,
IF(ROW_NUMBER() OVER( PARTITION BY `user`,DATE_FORMAT(`timestamp`,'%Y-%m-%d %h') ORDER BY `user`,`timestamp`) < 3,0,1) extra
FROM table1) t2 ON t1.id = t2.id
SET t1.`extra` = t2.`extra`
SELECT * FROM table1
id | user | timestamp           | extra
-: | ---: | :------------------ | ----:
 1 |    1 | 2021-05-18 15:46:18 |     0
 2 |    2 | 2021-05-18 15:41:18 |     1
 3 |    2 | 2021-05-18 15:38:18 |     1
 4 |    2 | 2021-05-18 15:19:18 |     0
 5 |    2 | 2021-05-18 15:12:18 |     0
 6 |    1 | 2021-05-18 14:46:18 |     0
 7 |    2 | 2021-05-18 14:46:18 |     0
 8 |    2 | 2021-05-18 14:13:18 |     0
 9 |    1 | 2021-05-18 12:58:18 |     1
10 |    2 | 2021-05-18 12:46:18 |     0
11 |    1 | 2021-05-18 12:13:18 |     0
12 |    1 | 2021-05-18 12:01:18 |     0

db<>fiddle here