[英]SQL Show most recent record in GROUP 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
我正在嘗試 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
我對如何去做有點迷茫?
編輯:
好的,伙計們,我現在在我的真實電腦上,對於構建不當的問題感到抱歉。
這是我實際上想做的事情:
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
基本上,我只想顯示“SubjectCode”的最新“DateApprove”,所以我不會獲得多個條目。
從這個開始:
select StudentId, max(DateApproved)
from tbl
group by StudentId
然后將其集成到主查詢:
select *
from tbl
where (StudentId, DateApproved) in
(
select StudentId, max(DateApproved)
from tbl
group by StudentId
)
你也可以使用這個:
select *
from tbl
join (select StudentId, max(DateApproved) as DateApproved
from tbl
group by StudentId)
using (StudentId, DateApproved)
但我更喜歡元組測試,它更整潔
現場測試: http ://www.sqlfiddle.com/#!2/771b8/5
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
對於在撰寫本文時(2020 年)仍不支持元組的 SQL Server 中嘗試此操作的用戶,您可以使用以下內容(在此處改進另一個答案)
改變這個:
-- MYSQL
select *
from tbl
where (StudentId, DateApproved) in
(
select StudentId, max(DateApproved)
from tbl
group by StudentId
)
進入這個:
-- Microsoft SQL Server
select *
from tbl
where concat(StudentId, DateApproved) in
(
select concat(StudentId, max(DateApproved))
from tbl
group by StudentId
)
SELECT *
FROM TheTable a
WHERE NOT EXISTS(SELECT *
FROM TheTable b
WHERE b.StudentCode = a.StudentCode AND b.DateApproved > a.DateApproved)
這對我在 postgres 中更有效。
select * from tbl t1 where t1.DateApproved = (select max(t2.DateApproved) from tbl t2 where t2.StudentId = t1.StudentId)
此代碼適用於 SQL Server 2016。
select StudentId, max(DateApproved) 來自 tbl group by StudentId
此代碼將顯示每個學生 ID 批准的最大和最小日期。
select StudentId,最大值(批准日期),最小值(批准日期)
來自 tbl 按 StudentId 分組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.