我有一张table,可以简化为:
ID |team_id | submission file | date
========================================
1 | 1756 | final_project.c |2018-06-22 19:00:00
2 | 1923 | asdf.c |2018-06-22 16:00:00
3 | 1756 | untitled.c |2018-06-21 20:00:00
4 | 1923 | my_project.c |2018-06-21 14:00:00
5 | 1756 | untitled.c |2018-06-21 08:00:00
6 | 1814 | my_project.c |2018-06-20 12:00:00
这是一张向我提交他们项目的人的表格,但我只想要每个学生最近提交的项目,每个学生都有一个唯一的团队id。
如何回忆每个团队id的最近一行,以便我的回忆如下所示:
ID |team_id | submission file | date
========================================
1 | 1756 | final_project.c |2018-06-22 19:00:00
2 | 1923 | asdf.c |2018-06-22 16:00:00
6 | 1814 | my_project.c |2018-06-20 12:00:00
谢谢你的帮助!
3条答案
按热度按时间idv4meu81#
编辑:在我发疯的时候,yogesh在MySQL5的答案上打败了我。您需要在两个
team_id
以及submission_file
以防您在同一天收到一个团队提交的多个文件。根据您使用的mysql版本的不同,可以采用不同的方法来实现。
设置
查询
如果您使用的是MySQL5.x或更低版本,那么您将希望使用具有
LIMIT
在上面拉上你想要的那排。mysql 8添加了窗口函数(最后),这使得这样的问题更容易解决,而且可能也更高效。您可以使用
ROW_NUMBER()
窗口功能。db<>在这里摆弄
注:在重读op之后,其意图可能与我最初阅读的有所不同。在我的查询中,我的筛选将返回所有唯一查询中最近的一个
submission_file
团队提交的名称。因此,如果一个团队提交了3个文件,您将获得这些文件的所有3个最新版本。如果你移除submission_file
从5子查询和8子查询PARTITION BY
,它将仅返回团队提交的最新单个文件,而不考虑名称。qxgroojn2#
Subquery
将使用相关方法执行您想要的操作:kuuvgm7e3#
您可以使用self-join来选择每个团队最近的一行