mysql - 从 X.X+1、X+2、X+3、X+4 等返回每个第二窗口中记录的第一条记录

标签 mysql loops select

我会尽力解释我的奇怪情况。我有一堆数据记录到十分之一秒。从时间 X 开始,几乎每秒都会发生一个事件。每一秒都被视为一个“事件窗口”。记录的时间是从 X 开始耗时。使用第一条记录作为“种子”,我只需要从 X 返回每个第二个窗口中记录的第一条记录。X+1、X+2、X+3 , X+4 等

targets
--------------------------
| id  | time  | name     |
|-----|------ |-----------
| 1   |  1.0  | target01 |
| 2   |  1.1  | target01 |
| 3   |  1.2  | target01 |
| 4   |  1.3  | target01 |
| 5   |  1.4  | target01 |
| 6   |  1.5  | target01 |
| 7   |  1.6  | target01 |
| 8   |  1.7  | target01 |
| 9   |  1.8  | target01 |
| 10  |  1.9  | target01 |
| 11  |  2.0  | target01 |
| 12  |  2.1  | target01 |
| 13  |  2.2  | target01 |

...

| 50  |  4.9  | target01 |
| 51  |  5.3  | target01 |
| 52  |  5.4  | target01 |
| 53  |  5.5  | target01 |
| 54  |  5.6  | target01 |
| 55  |  5.7  | target01 |
| 56  |  5.8  | target01 |
| 57  |  5.9  | target01 |
| 58  |  6.0  | target01 |
| 59  |  6.1  | target01 |
| 60  |  6.2  | target01 |
| 61  |  6.3  | target01 |
| 62  |  6.4  | target01 |
--------------------------

我怎样才能得到这个返回:

--------------------------
| id  | time  | name     |
|-----|------ |-----------
| 1   |  1.0  | target01 |
| 11  |  2.0  | target01 |
| 21  |  3.0  | target01 |
| 31  |  4.0  | target01 |
| 51  |  5.3  | target01 |
| 58  |  6.0  | target01 |
--------------------------

请注意记录 51 在 5.3 秒处。它是落在四秒窗口 (X+4) 内的第一条记录。

可怕的数据库规划,但我仍然坚持继承这个烂摊子。想法?

最佳答案

您可能需要使用 FLOORCOALESCE 函数

SELECT FLOOR(time) AS whole_second, COALESECE(id), COALESCE(time), COALESCE(name)
FROM table
GROUP BY whole_second
ORDER BY whole_second ASC

关于mysql - 从 X.X+1、X+2、X+3、X+4 等返回每个第二窗口中记录的第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959143/

相关文章:

java - SQL Server 2008 上的分页

PHP 数据库中存储的变量值不正确

mysql - 循环遍历日期列表(或任何列表)并在 mysql 或 Snowflake 中附加查询

sql - 选择所有薪水相同的人

sql - 将日期与空值进行比较

MYSQL INSERT INTO FROM SELECT UPDATE WHERE 不存在

php - CakePHP3,保存用户注册的当前日期

linux - 结束一个 mpirun 进程终止一个 b​​ash 循环

loops - 使用 Powershell 循环遍历单个输出中的每个项目

javascript - 使用 jQuery Uniform.js 更改选择值