Select 最大状态 ID
Select MAX StatusID
我有 table 个这样的:
状态
StatusID | Status |
-------------------
1 | Good |
2 | Nice |
3 | Bad |
课程
CourseID | Course |
-------------------
1 | Math |
2 | Science|
3 | Art |
进程
StudentID| CourseID | Status ID|
--------------------------------
1 | 1 | 1
1 | 2 | 1
1 | 2 | 2
2 | 1 | 3
2 | 1 | 1
我要的结果是这样
StudentID| Course | Status|
--------------------------------
1 | Art | Nice
1 | Math | Good
2 | Science | Bad
有人可以帮助我吗?如何 select 那 table 用于 sql?
<?php $query ="Select StudentID, Course, max(StatusID) from student a, course b, process c
where a.student = c.studentid and b.studentid = c.studentid
group by studentid, processid";
$result=mysql_query($query);
while($row=mysql_fetch_array($result)){
echo $row['StudentID'];
echo $row['Course'];
echo $row['Status'];
有效,但状态不是最大状态。我尝试 SQL StatusID 是最大结果。
}
?>
简单 Join
和 Group by
应该可以。试试这个。
SELECT p.studentid,
c.courseid,
Max(p.statusid) statusid
FROM Status s
JOIN Process p
ON s.StatusID = p.StatusID
JOIN Course c
ON c.CourseID = p.CourseID
GROUP BY p.studentid,
c.courseid
您可以使用自联接来获取每个学生和每个课程具有最高状态 ID 的行
select t.*
from Process t
join (select `StudentID`, `CourseID`,max(`Status ID`) `Status ID`
from Process
group by `StudentID`, `CourseID`) t1
using(`StudentID`, `CourseID`,`Status ID`)
也不要在 table 中使用空格,列名应使用 _
就像列 Status ID 一样,如果您将其表示为 status_id 会很好,这样您就不会不需要反引号
您想知道每门课程学生的最高状态,对吧?在这种情况下,这就是您需要的:
SELECT StudentID,
CourseID,
MAX(StatusID)
FROM Process
GROUP BY StudentID, CourseID;
我相信你想要一行用于不同的 studentid,courseID 并且你想要它的最大状态,如果我是正确的那么有一个简单的解决方案
请尝试
SELECT studentid,courseid,MAX(statusid) FROM `process`
GROUP BY studentid,courseid
试试这个:
SELECT A.StudentID, A.CourseID, S.Status AS StatusID
FROM (SELECT P.StudentID, P.CourseID, MAX(S.StatusID) AS StatusID
FROM PROCESS P
INNER JOIN STATUS S ON P.StatusID = S.Status
GROUP BY P.StudentID, P.CourseID
) AS A
INNER JOIN STATUS S ON A.StatusID = S.StatusID
我有 table 个这样的:
状态
StatusID | Status |
-------------------
1 | Good |
2 | Nice |
3 | Bad |
课程
CourseID | Course |
-------------------
1 | Math |
2 | Science|
3 | Art |
进程
StudentID| CourseID | Status ID|
--------------------------------
1 | 1 | 1
1 | 2 | 1
1 | 2 | 2
2 | 1 | 3
2 | 1 | 1
我要的结果是这样
StudentID| Course | Status|
--------------------------------
1 | Art | Nice
1 | Math | Good
2 | Science | Bad
有人可以帮助我吗?如何 select 那 table 用于 sql?
<?php $query ="Select StudentID, Course, max(StatusID) from student a, course b, process c
where a.student = c.studentid and b.studentid = c.studentid
group by studentid, processid";
$result=mysql_query($query);
while($row=mysql_fetch_array($result)){
echo $row['StudentID'];
echo $row['Course'];
echo $row['Status'];
有效,但状态不是最大状态。我尝试 SQL StatusID 是最大结果。
} ?>
简单 Join
和 Group by
应该可以。试试这个。
SELECT p.studentid,
c.courseid,
Max(p.statusid) statusid
FROM Status s
JOIN Process p
ON s.StatusID = p.StatusID
JOIN Course c
ON c.CourseID = p.CourseID
GROUP BY p.studentid,
c.courseid
您可以使用自联接来获取每个学生和每个课程具有最高状态 ID 的行
select t.*
from Process t
join (select `StudentID`, `CourseID`,max(`Status ID`) `Status ID`
from Process
group by `StudentID`, `CourseID`) t1
using(`StudentID`, `CourseID`,`Status ID`)
也不要在 table 中使用空格,列名应使用 _
就像列 Status ID 一样,如果您将其表示为 status_id 会很好,这样您就不会不需要反引号
您想知道每门课程学生的最高状态,对吧?在这种情况下,这就是您需要的:
SELECT StudentID,
CourseID,
MAX(StatusID)
FROM Process
GROUP BY StudentID, CourseID;
我相信你想要一行用于不同的 studentid,courseID 并且你想要它的最大状态,如果我是正确的那么有一个简单的解决方案
请尝试
SELECT studentid,courseid,MAX(statusid) FROM `process`
GROUP BY studentid,courseid
试试这个:
SELECT A.StudentID, A.CourseID, S.Status AS StatusID
FROM (SELECT P.StudentID, P.CourseID, MAX(S.StatusID) AS StatusID
FROM PROCESS P
INNER JOIN STATUS S ON P.StatusID = S.Status
GROUP BY P.StudentID, P.CourseID
) AS A
INNER JOIN STATUS S ON A.StatusID = S.StatusID