我得到了這個問題,我要從學生表中的每門課程中選擇最年輕的學生。如何在分組課程時獲得最大出生日期?
SELECT name, lastname, MAX(fdate) as 'Youngest', course
FROM student
GROUP BY course
結果:http://i.imgur.com/9mx5Mfy.png
該查詢返回三個療程最高的日期,但相關的名稱是錯誤的。 這只是在MySQL
當然一個簡單的任務,而且我們不打算使用JOINs.
我得到了這個問題,我要從學生表中的每門課程中選擇最年輕的學生。如何在分組課程時獲得最大出生日期?
SELECT name, lastname, MAX(fdate) as 'Youngest', course
FROM student
GROUP BY course
結果:http://i.imgur.com/9mx5Mfy.png
該查詢返回三個療程最高的日期,但相關的名稱是錯誤的。 這只是在MySQL
當然一個簡單的任務,而且我們不打算使用JOINs.
試試這個:在同一
SELECT s1.name, s1.lastname, s1-fdate
FROM student s1
WHERE NOT EXISTS (
SELECT 'YOUNGEST'
FROM student s2
WHERE s2.course = s1.course
AND s2.fdate > s1.fdate
)
在此查詢,我想要檢索,在學生中當然(s2.course = s1.course),最年輕的(s2.fdate> s1.fdate)
謝謝,這工作。雖然它在我們所處的層面上有點複雜。所有其他任務就像'SELECT * FROM student WHERE fdate>'1990-1-1''等一樣簡單。只需挑選小而簡單的東西。 –
,如果你不打算使用連接,以便您可以使用內部的選擇
select
A.course_name as "Name",
max(A.day_of_birth) as "Birth date",
(select
student_name
from students
where course_name = A.course_name and day_of_Birth=max(A.day_of_birth) limit 1
) as "who"
from students A
group by A.course_name
這是不高效的..如果表格很大,它將是一個非常慢的查詢執行 –
我的事情,執行計劃是選擇最大(birth_date)的課程比執行子選擇。可能是我錯了 – MartinB
當你做一個子選擇與where條件就像它做了選擇的每個選擇在外部選擇...這意味着你正在做一個選擇來比較你的(外部選擇表)學生表...爲這個問題的目的,這可能是一個很好的解決方案,但總的來說,這種方法是一個壞主意 –
IMO此語句在語法上是錯誤的。至少在像Oracle這樣的其他數據庫中,您必須在「group by」 - >「group by name,lastname,course」中列出所有非聚合列。 – hgoebl
@ user2989408 no。最年輕的是最近的日期=最大日期。老年人有最近的日期 – Brad
@hgoebl這是一個特殊的Mysql(錯誤)功能,您可以選擇字段而無需對它們進行分組。然後Mysql會從組中的一行中選擇一個值。這就是爲什麼這個名字是錯誤的。 – MTilsted