计算带有日期的唯一字符串的数量,可能有错误

Calculate the number of unique strings with the date, with a possible error

在 select 中,我从 table 中获取时间格式为 TIMESTAMP 的行。我想计算唯一行数,但可能有 1 秒的错误。例如下面的例子,3条唯一记录(1和2有1秒的误差,因此算作一条)。

我想做一个像 ABS(time_1 - time_2) > 1 这样的函数来搜索唯一值。

  1. 是否可以在 SQL 端以某种方式实现它,或者在服务器端实现它会更好,因为服务器端会提取这些数据?
  2. 没有函数也能做到吗?
  3. 这会给数据库带来多大的负担?

欢迎任何解决问题的tips!

ps: 我有一个旧版本 SQL 5.7

示例输出:

+------------+
|  time      |
+------------+
| 1583060400 |
+------------+
| 1583060401 |
+------------+
| 1583060460 |
+------------+
| 1583074860 |
+------------+

假设“如果一行 TIMESTAMP 与前一行 TIMESTAMP 的差异不超过 1 秒,则忽略该行存在”,您可以使用

SELECT MAX(counter) groups_amount
FROM ( SELECT CASE WHEN TIMESTAMPDIFF(SECOND, @previous, `time`) > 1
                   THEN @counter := @counter + 1
                   END counter,
              @previous := `time`
       FROM test
       CROSS JOIN ( SELECT @previous := '1970-01-01 00:00:01', 
                           @counter := 0 ) init_vars
       ORDER BY `time` ASC ) subquery;

https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=2aba3b8f473e65f4f40e449c8d97a79d