MYSQL получить записи по группам по дате des c и по дате заказа asc - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть таблица mysql с данными ниже.

name        table_data       table_date 
name1         {count:2}       2020-01-24 02:23:41
name1         {count:5}       2020-01-24 05:45:07
name1         {count:8}       2020-01-24 12:45:18
name1         {count:20}      2020-01-30 08:40:07
name1         {count:28}      2020-01-30 15:08:12

Я хочу sql для получения только одной записи для даты. Проблема в том, что я должен заказать таблицу на основе table_date как c, но для каждой даты требуется только самая последняя запись.

Ожидаемый результат:

name        table_data      table_date  
name1         {count:8}       2020-01-24 12:45:18
name1         {count:28}      2020-01-30 15:08:12

My sql это как:

select name, table_data, table_date
 from my_table 
 where DATE(table_date) <= DATE('2020-04-01') group by DATE(table_date) order by table_date asc 

Но этот SQL даст запись только с минимальной датой.

Может кто-нибудь помочь мне решить эту проблему?

Заранее спасибо.

1 Ответ

1 голос
/ 01 апреля 2020

Вы не упоминаете версию MySQL, которую используете. В MySQL 8.x вы можете использовать ROW_NUMBER(), чтобы решить, какие строки сохранить.

Например:

select name, table_date
from (
  select name, table_date
    row_number() over partition by name order by table_date desc) as rn
  from my_table
) x
where rn = 1

Я думаю, что в MySQL 5.x вы можете использовать IN с кортежами. Например:

select *
from my_table
where (name, table_date) in (
  select name, max(table_date) from my_table group by name, date(table_date)
)
...