2012-07-10 122 views
1

我有数据在我的数据库MySQL查询最近更新的行

ID UserID CourseName Grade         
1  8  CourseA  75 
2  8  CourseA  102 
3  8  CourseA  115 
4  8  CourseA  111 
5  8  CourseA  112 
6  8  CourseB  60 
7  8  CourseB  45 
8  8  CourseB  58 
9  8  CourseB  60 
10  8  CourseB  74 
11  8  CourseC  130 
12  8  CourseC  140 
13  8  CourseC  133 
14  8  CourseC  135 

我需要一个像

`8  CourseA 112  
8  CourseB 74 
8  CourseC 135` 

单个当然,最后更新等级可能有人建议我为这个SQL查询。

+2

如果没有其他列像递增的id或时间戳那样,由于这里没有确定性顺序,因此您无法可靠地获取最后一个列。这些是你桌子上的所有列还是更多? – 2012-07-10 13:12:31

回答

0

好吧,更新我的回答:

明白了:

SELECT UserID, CourseName, Grade 
FROM yourtable 
WHERE UserID = '8' 
AND ID 
IN (
    SELECT MAX(ID) 
    FROM yourtable 
    GROUP BY CourseName 
) 
+0

我们有一个主键 – ronquiq 2012-07-10 13:21:28

+0

你可以请你张贴桌子的结构吗? – Ruel 2012-07-10 13:22:02

+0

它是一个有很多列的大表 – ronquiq 2012-07-10 13:33:00

0

您可以添加另一列 修改日期

alter table tableName add column modifiedDate DEFAULT NOW() ON UPDATE NOW() 

那么你得到的最后更新等级为当然

select * from tableName where course ='CourseA' 
order by modifiedDate desc limit 1 
0
select * from Course a 
where id=(select max(b.id) from Course b where b.CourseName=a.CourseName); 

Aftwerwards你可以通过ID组的结果,CourseName

未测试!