MySQL 按日期时间字段抽样数据
MySQL sampling data by datetime field
我有一个 MySQL table 结构如下:
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 |
--------------------------------------------------------------
我需要 select 通过在过去每 30 分钟在时间戳字段上对它们进行采样来 select 给定值 secondary_key 的记录(即来自上面的数据:如果现在是 10:53 和辅助键 = value1,我希望我的查询 return 仅记录 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 table 结构如下:
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 |
--------------------------------------------------------------
我需要 select 通过在过去每 30 分钟在时间戳字段上对它们进行采样来 select 给定值 secondary_key 的记录(即来自上面的数据:如果现在是 10:53 和辅助键 = value1,我希望我的查询 return 仅记录 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;