MYSQL获取按日期desc分组的记录和按日期asc排序的记录



我有一个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 asc订购表格,但只需要每个日期的最新记录。

预期结果:

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

我的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只会给出最短日期的记录。

有人能帮我解决这个问题吗?

提前谢谢。

您没有提到您正在使用的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)
)

最新更新