我有一个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)
)