2012-05-04 26 views
1

我试图做这样的事情,我不知道,如果它使用简单GROUP BY可能:SQL GROUP BY但使用最新的记录?

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 

所以当我有这样的一个表:

学生:2012- 12345

SubjectCode | Grade | DateApproved 
SUBJ123 | 2.00 | 1/4/2012 
SUBJ123 | 1.75 | 1/5/2012 
SUBJ987 | 1.50 | 1/5/2012 

它会看起来应该是这样:

学生:2012-12345

SubjectCode | Grade | DateApproved 
SUBJ123 | 1.75 | 1/5/2012 
SUBJ987 | 1.50 | 1/5/2012 

编辑:这里是解决方案:

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='2011-10172' AND 
    NOT EXISTS (
     SELECT 1 FROM gradebook G2 INNER JOIN gradebookdetail GD2 ON G2.GradebookId=GD2.GradebookId 
     WHERE 
      G2.GradebookType = 'final' AND 
      G2.DateApproved IS NOT NULL AND 
      GD2.StudentIdNumber = GD.StudentIdNumber AND 
      G2.SubjectCode = G.SubjectCode AND 
      G2.DateApproved > G.DateApproved 
    ) 
ORDER BY G.SubjectCode ASC 
+0

你试图完成什么?它是否以最新的批准日期和等级获取不同的主题词记录?那么一个子选择会更合适。 – Falle1234

+0

@ Falle1234,是的,这就是我试图完成的事情。要获取不同的主题代码与最新的DateApproved –

回答

1

我觉得这个查询会做你想要什么,但我没有测试它。所以让我知道是否有什么问题。

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' AND 
    NOT EXISTS (
     SELECT 1 FROM gradebook G2 
     WHERE 
      G2.GradebookType = 'final' AND 
      G2.DateApproved IS NOT NULL AND 
      G2.StudentIdNumber = G.StudentIdNumber AND 
      G2.StudentCode = G.SubjectCode AND 
      G2.DateApproved > G.DateApproved 
    ) 
ORDER BY G.SubjectCode ASC 
+0

我似乎无法得到这种方法工作 –

+0

什么似乎是问题?它是否不返回任何行或者是否选择了错误的行? – Falle1234

+0

它返回错误的行。你能解释一下这种方法吗,也许我们可以进一步调整它?谢谢 –