我有一个包含100万行的表,我希望获取具有最小日期的行并按日格式化。
我的表是:
Id Created_at Value
1 2019-04-08 10:35:32 254
1 2019-04-08 10:31:23 241
1 2019-04-08 11:47:32 258
2 2019-04-08 10:32:42 276
2 2019-04-08 10:34:23 280
2 2019-04-08 11:34:23 290
我想得到(每小时最小的created_at值和小时格式):
Id Created_at Value
1 2019-04-08 10:00:00 241
1 2019-04-08 11:00:00 258
2 2019-04-08 10:00:00 276
2 2019-04-08 11:00:00 290
我有mysql 5.7所以我无法构建窗口查询。我正在研究选择这些元素的最有效方法。你有好主意吗 ?
我会做的事情如下:
select
t.id, m.h, t.value
from my_table t
join (
select
id,
from_unixtime(floor(unix_timestamp(created_at) / 3600) * 3600) as h,
min(created_at) as min_created_at
from my_table
group by id, from_unixtime(floor(unix_timestamp(created_at) / 3600) * 3600)
) m on m.id = t.id and m.min_created_at = t.created_at
在mysql 5.7中
您可以在子查询上使用连接来获得最小结果
select m.id, date(m.created_at) , m.value
INNER JOIN (
select min(created_at) min_date
from my_tbale
group by date(created_at),hour(created_at)
) t on t.min_date = m.created_at
确保my_table列上有一个复合索引(created_at,id,value)