Mam tabelę MySQL z poniższymi danymi.

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

Chcę SQL za uzyskanie jedynego rekordu na randkę. Problem polega na tym, że mam zamówić tabelę opartą na Table_date ASC, ale potrzebujesz tylko najnowszego rekordu na każdą datę.

Spodziewany wynik:

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

Mój SQL jest jak:

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 

Ale ten SQL da tylko rekord z minimalną datą.

Czy ktoś może mi pomóc rozwiązać ten problem?

Z góry dziękuję.

0
Jenz 1 kwiecień 2020, 18:28

1 odpowiedź

Najlepsza odpowiedź

Nie wspominasz o wersji MySQL, której używasz. W MySQL 8.x można użyć ROW_NUMBER(), aby zdecydować, które wiersze do zachowania.

Na przykład:

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

Myślę, że w MySQL 5.X możesz użyć IN z Ktoczkami. Na przykład:

select *
from my_table
where (name, table_date) in (
  select name, max(table_date) from my_table group by name, date(table_date)
)
1
The Impaler 1 kwiecień 2020, 15:39