Самый эффективный запрос для выбора min элементов из таблицы и date_format - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть одна таблица с 1 миллионом строк, и я хочу получить строки с минимальной датой и отформатированные по дням.

Мой стол:

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

И я хотел бы получить (минимальные значения create_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, поэтому я не могу создавать оконные запросы. Я исследую наиболее эффективный способ выбора этих элементов. У вас есть идея?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Я бы сделал что-то вроде:

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
1 голос
/ 08 апреля 2019

В 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 (созданный_кат, id, значение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...