我会尽力解释我的奇怪情况。我有一堆数据记录到十分之一秒。从时间 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) 内的第一条记录。
可怕的数据库规划,但我仍然坚持继承这个烂摊子。想法?
最佳答案
您可能需要使用 FLOOR
和 COALESCE
函数
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/