如何使用SQL查询中的唯一ID过滤旧条目

时间:2012-06-25 09:17:44

标签: asp.net mysql sql database

我有一张桌子和一个关系

我可能有10个提交,但是当我查询数据库时,我只想获得具有唯一CaseId的那些,并且要返回的那个应该是具有最新Date的那个。是否可以(并且建议)在单个查询中执行此操作,或者我应该在我获取数据的后面的asp.nets代码中进行过滤?

修改:新图片

enter image description here enter image description here

在这里你可以看到我展示了许多具有相同案例ID的项目,我只想显示最新的项目(基于日期)

这是我当前的SQL查询

SELECT Submission.Id, Date, center.Name as CenterName, center.Id as CenterId, subject.Name as SubjectName, subject.Id as SubjectId, EmployeeName, Reason, Description, Explanation, Done, ChiefLevel, Action, CaseId 
                    FROM Submission, subject, center
                    WHERE center.Id=CenterId AND subject.Id=SubjectId
                    ORDER BY Date DESC;

2 个答案:

答案 0 :(得分:2)

SELECT caseid 
FROM 
( 
SELECT caseid, max(date) AS max_date 
FROM submission 
GROUP BY caseid 
) a 
JOIN subject t ON a.subjectid=t.id

答案 1 :(得分:0)

我的QUERY最终成为了这个

SELECT s.Id, s.Date, c.Name as CenterName, c.Id as CenterId, su.Name as SubjectName, su.Id as SubjectId, s.EmployeeName, s.Reason, s.Description, s.Explanation, s.Done, s.ChiefLevel, s.Action, s.CaseId
                    FROM submission as s
                      INNER JOIN 
                      ( 
                        SELECT CaseId, MAX(Date) AS MaxDateTime 
                          FROM submission 
                        GROUP BY CaseId 
                      ) as groupeds 
                      ON  s.CaseId = groupeds.CaseId 
                      AND s.`Date` = groupeds.MaxDateTime 
                      INNER JOIN
                      (
                        SELECT Id, Name 
                          FROM subject
                      ) as su 
                      ON su.Id=SubjectId
                      INNER JOIN 
                      (
                        SELECT Id, Name 
                          FROM center
                      ) as c 
                      ON c.Id=CenterId;