MySQL:具有最小日期的唯一行
假设我有下表:MySQL:具有最小日期的唯一行,mysql,sql,filter,Mysql,Sql,Filter,假设我有下表: NAME DATE OTHER_CONTANT 'A' '2012-06-05' 'baz' 'A' '2012-06-04' 'bar' 'B' '2012-06-05' 'foo' 'C' '2012-06-05' 'bla' 'C' '2012-06-04' 'blah' 'C' '2012-06-06' 'bleh' 现在,我想筛选此表,使其仅包含具有唯一名称和最早日期的行: 'A' '2012-06-04' 'bar' 'B' '2012-06-05' 'foo'
NAME DATE OTHER_CONTANT
'A' '2012-06-05' 'baz'
'A' '2012-06-04' 'bar'
'B' '2012-06-05' 'foo'
'C' '2012-06-05' 'bla'
'C' '2012-06-04' 'blah'
'C' '2012-06-06' 'bleh'
现在,我想筛选此表,使其仅包含具有唯一名称和最早日期的行:
'A' '2012-06-04' 'bar'
'B' '2012-06-05' 'foo'
'C' '2012-06-04' 'blah'
我曾考虑使用GROUPBY语句,但使用GROUPBY只能得到一列作为结果,我希望得到整行。有没有关于如何进行此筛选的建议?这两个查询都非常有效
SELECT *
FROM MyTable a
INNER JOIN (SELECT name,
Min(date) AS date
FROM MyTable
GROUP BY name) b
ON a.name = b.name
AND a.date = b.date
或
两个查询都可以完美地工作
SELECT *
FROM MyTable a
INNER JOIN (SELECT name,
Min(date) AS date
FROM MyTable
GROUP BY name) b
ON a.name = b.name
AND a.date = b.date
或
下面的SQL将创建所有不同名称的列表。然后,对于每个名称,它将查找具有最新日期的条目
select *
from (
select distinct name
from YourTable
) names
join YourTable yt1
on yt1.name = names.name
and yt1.date =
(
select date
from YourTable yt2
where yt2.name = yt1.name
order by
date
limit 1
)
下面的SQL创建了所有不同名称的列表。然后,对于每个名称,它将查找具有最新日期的条目
select *
from (
select distinct name
from YourTable
) names
join YourTable yt1
on yt1.name = names.name
and yt1.date =
(
select date
from YourTable yt2
where yt2.name = yt1.name
order by
date
limit 1
)
您可以使用以下选项:
select m.name, m.date, m.other_constant
from mytable m
join (select name, min(date) min_date from mytable group by name) n
on m.name = n.name and m.date = n.min_date
有关此信息,请参见。您可以使用以下选项:
select m.name, m.date, m.other_constant
from mytable m
join (select name, min(date) min_date from mytable group by name) n
on m.name = n.name and m.date = n.min_date
有关此信息,请参见。@mnowotka:您是否希望在输出中也包含
其他内容
?是的,确实如此,而且可能还有更多的列,我希望避免在我的查询中枚举它们的名称。@mnowotka:然后检查其他人的答案。beny23提供的小提琴正在工作。我将评估所有小提琴,并接受执行时间最短的有效小提琴。顺便说一句,讨论得很好。一个特定的名字能不止一次有相同的日期吗?@mnowotka:你想在你的输出中也包含OTHER\u CONTANT
吗?是的,没错,也许还有更多的列,我想避免在我的查询中列举它们的名字。@mnowotka:然后检查其他人的答案。beny23提供的小提琴正在工作。我将评估所有小提琴,并接受执行时间最短的有效小提琴。顺便说一句,讨论得很好。一个特定的名字可以不止一次有相同的日期吗?+1对于SQL FIDLE,测试你的答案总是很好的+1对于SQL FIDLE,实际测试您的答案总是很好的!我不喜欢枚举内部查询中的所有列名。我不喜欢枚举内部查询中的所有列名。第一个列名似乎快得多。它可能取决于定义的索引。第一个列名似乎快得多。它可能取决于定义的索引。我不喜欢枚举内部查询中的所有列名。我不喜欢枚举内部查询中的所有列名。