我有一个结构如下的 MySQL 表:
ID | data | Timestamp | secondary_key |
--------------------------------------------------------------
|1 | blahblah |2018-09-03 10:45:27 | value1 |
--------------------------------------------------------------
|2 | someotherblah |2018-09-08 10:46:56 | value2 |
--------------------------------------------------------------
|3 | blahblahagain |2018-09-03 10:17:02 | value1 |
--------------------------------------------------------------
|4 | someotherblah |2018-09-03 10:52:02 | value1 |
--------------------------------------------------------------
我需要通过在过去每 30 分钟在时间戳字段上对它们进行采样来选择具有给定值的 secondary_key 的记录(即从上面的数据:如果现在是 10:53 并且辅助键 = value1,我想要我的查询只返回 ID = 4 和 3 的记录)。 我怎样才能做到这一点?
我希望我的问题能被理解,抱歉我的英语不好。
编辑:这是在 2018-09-03 10:53 执行查询时的预期输出
|ID | data | Timestamp | secondary_key |
--------------------------------------------------------------
|4 | someotherblah |2018-09-03 10:52:02 | value1 |
--------------------------------------------------------------
|3 | blahblahagain |2018-09-03 10:17:02 | value1 |
--------------------------------------------------------------
最佳答案
您可以在 30 分钟内对子选择组使用联接
select * from my_table
inner join (
SELECT min(Timestamp) min_time, secondary_key
from my_table
where secondary_key = 'value1'
GROUP BY ROUND(UNIX_TIMESTAMP(timestamp)/(30* 60)), secondary_key
) t on my_table.Timestamp = t.min_time and t.secondary_key = my_table.secondary_key;
关于MySQL按日期时间字段采样数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753704/