Mysql 在sql中选择重复多次的每个ID的最新日期行
我有一个表,每个ID重复3次。每行的每个id前面都有一个日期。 我想为日期最晚的每个ID选择整行。 此表中总共有370列,我希望在选择该行时选中所有列 样品-Mysql 在sql中选择重复多次的每个ID的最新日期行,mysql,sql,hive,Mysql,Sql,Hive,我有一个表,每个ID重复3次。每行的每个id前面都有一个日期。 我想为日期最晚的每个ID选择整行。 此表中总共有370列,我希望在选择该行时选中所有列 样品- ID Name Date Marks .. .. .. 1 XY 4/3/2017 27 1 fv 4/3/2014 98 1 jk 4/3/2016 09 2 RF 4/12/2015 87 2
ID Name Date Marks .. .. ..
1 XY 4/3/2017 27
1 fv 4/3/2014 98
1 jk 4/3/2016 09
2 RF 4/12/2015 87
2 kk 4/3/2009 56
2 PP 4/3/2011 76
3 ee 4/3/2001 12
3 ppp 4/3/2003 09
3 lll 4/3/2011 23
答案应该是
ID Name Date Marks .. .. ..
1 XY 4/3/2017 27
2 RF 4/12/2015 87
3 lll 4/3/2011 23
我正在尝试以下方法-
select distinct ID,*,max(date) as maxdate from table
我也在蜂箱里试这个。因此,不确定某些sql函数是否在配置单元中不起作用
谢谢一个方法是:
select table.*
from table
join
(
select ID, max(Date) as max_dt
from table
group by ID
) t
on table.ID= t.ID and table.Date = t.max_dt
请注意,如果同一ID有多个同样高的日期,则会在结果中得到所有这些行。是否尝试了以下操作:
SELECT ID, COUNT(*), max(date)
FROM table
GROUP BY ID;
可以使用相关子查询执行此操作,该子查询是在主查询中引用字段的子查询。在这种情况下:
SELECT *
FROM yourtable t1
WHERE date = (SELECT max(date) from yourtable WHERE id = t1.id)
在这里,我们给yourtable表一个别名t1,然后在子查询中使用该别名,从同一个表yourtable获取该id的maxdate。您可以使用连接来完成此操作
SELECT t1.* from myTable t1
LEFT OUTER JOIN myTable t2 on t2.ID=t1.ID AND t2.`Date` > t1.`Date`
WHERE t2.`Date` IS NULL;
只有具有每个ID的最新日期的行才有空的t2联接。这里有一种方法。内部查询获取每个id的最大日期。然后您可以将其连接回主表以获取匹配的行
select
*
from
<your table>
inner join
(select id, max(<date col> as max_date) m
where yourtable.id = m.id
and yourtable.datecolumn = m.max_date)
这个问题以前有人问过。请看问题 使用公认的答案并根据您的问题进行调整,您会得到:
SELECT tt.*
FROM myTable tt
INNER JOIN
(SELECT ID, MAX(Date) AS MaxDateTime
FROM myTable
GROUP BY ID) groupedtt
ON tt.ID = groupedtt.ID
AND tt.Date = groupedtt.MaxDateTime
对于id为max date的记录,此操作不会返回表中的所有字段。是..正是这样发生的。。。然后我想我可以从整个数据库中删除重复的行。。。然后,这些多行将消失,每个id将只有一行。老派。很好。这给了我一个错误,因为在JOIN'date'中遇到的左别名和右别名是mysql报告的错误吗?我不知道这是否是问题所在,但Date是一个reserver单词,所以我用反勾号更新了我的答案。我认为这是一个配置单元错误-我的代码是为MySQL编写的,在最后一行看起来应该是,tt.Date=groupedtt.MaxDateTime。。。。谢谢。如果您喜欢答案,请向上投票并选择作为接受答案。如果日期来自用户,而相同或以前的日期来自用户,该怎么办???这里已经回答了类似的问题-这是一种非常缓慢的方式。@MaksimKniazev我不同意。在本例中,MySQL的执行计划类似于聚合子查询上的显式内部联接。当数据量很大时,它会花费很长时间。