SQL显示GROUP BY中的最新记录?

A.B*_*ser 17 mysql sql group-by sql-order-by

我有一个看起来像这样的表:

id    |    SubjectCode    |    Grade    |    DateApproved    |    StudentId

1            SUB123            1.25            1/4/2012            2012-12345

2            SUB123            2.00            1/5/2012            2012-12345

3            SUB123            3.00            1/5/2012            2012-98765   
Run Code Online (Sandbox Code Playgroud)

我正在尝试GROUP BY SubjectCode,但我希望它显示最近的DateApproved,所以它看起来像:

  id    |    SubjectCode    |    Grade    |    DateApproved    |    StudentId

2            SUB123            2.00            1/5/2012            2012-12345

3            SUB123            3.00            1/5/2012            2012-98765  
Run Code Online (Sandbox Code Playgroud)

我有点迷失在怎么办?

编辑:

好的家伙现在我在我的真实PC上,抱歉这个构造不好的问题.

这就是我实际上要做的事情:

SELECT GD.GradebookDetailId, G.SubjectCode, G.Description, G.UnitsAcademic, G.UnitsNonAcademic, 
GD.Grade, GD.Remarks, G.FacultyName, STR_TO_DATE(G.DateApproved, '%m/%d/%Y %h:%i:%s') AS 'DateAproved'
FROM gradebookdetail GD INNER JOIN gradebook G ON GD.GradebookId=G.GradebookId 
WHERE G.DateApproved IS NOT NULL AND G.GradebookType='final' AND StudentIdNumber='2012-12345'

GROUP BY <?????>
ORDER BY G.SubjectCode ASC
Run Code Online (Sandbox Code Playgroud)

基本上,我只想显示"SubjectCode"的最新 "DateApprove",所以我没有得到多个条目.

Mic*_*uen 27

从这开始:

select StudentId, max(DateApproved) 
from tbl
group by StudentId
Run Code Online (Sandbox Code Playgroud)

然后将其集成到主查询中:

select * 
from tbl
where (StudentId, DateApproved) in

(
  select StudentId, max(DateApproved) 
  from tbl
  group by StudentId
)
Run Code Online (Sandbox Code Playgroud)

你也可以用这个:

select * 
from tbl
join (select StudentId, max(DateApproved) as DateApproved 
      from tbl 
      group by StudentId)
using (StudentId, DateApproved)
Run Code Online (Sandbox Code Playgroud)

但我更喜欢元组测试,它更整洁

现场测试:http://www.sqlfiddle.com/#!2/771b8/5


Jai*_*han 7

SELECT t2.*
FROM temp t2 
INNER JOIN(
    SELECT MAX(DateApproved) as MaxDate, StudentId
    FROM temp
    GROUP BY StudentId
    ) t1 ON t1.MaxDate = t2.DateApproved and t1.StudentId = t2.StudentId
Run Code Online (Sandbox Code Playgroud)


eri*_*len 0

SELECT *
FROM TheTable a
WHERE NOT EXISTS(SELECT *
                 FROM TheTable b
                 WHERE b.StudentCode = a.StudentCode AND b.DateApproved > a.DateApproved)
Run Code Online (Sandbox Code Playgroud)