我搜索了论坛,但无法找到答案。所以我很抱歉,如果这是在那里。这在我看来似乎很简单,但是,我似乎无法获得正确的代码。
我有2张桌子。 //Réception message
socket.on("EVT_ReponseOKConnexionZEP", new Emitter.Listener() {
@Override
public void call(final Object... args) {
String data = (String) args[0];
Log.i("message :", data);
runOnUiThread(new Runnable() {
@Override
public void run() {
zepLayout.setBackgroundResource(R.drawable.rounded_corner_green);
logout_btn.setVisibility(View.VISIBLE);
login_btn.setVisibility(View.GONE);
}
});
}
});
表格包含STUDENT_TERMS_VIEW
,STTR_STUDENT
和STTR_TERM
表,其中包含TERMS
。我需要找到一种方法来根据TERM_END_DATE
选择学生的最后一个学期,但每个学生我得到MAX(TERM_END_DATE)
个重复行。我需要每位学生获得1排并且他们的最后一个学期参加。
编辑:好的,所以这两个表都由STTR_TERM
链接。
正如您所看到的,我正在为同一个学生获取重复的TERMS,即使我正在拉TERM
答案 0 :(得分:0)
SELECT * FROM
(SELECT STUDENT_TERMS_VIEW.STTR_STUDENT,
STUDENT_TERMS_VIEW.STTR_TERM,
TERMS.TERM_END_DATE
FROM STUDENT_TERMS_VIEW
JOIN STUDENT_TERMS_VIEW ON TERMS.TERMS_ID = STUDENT_TERMS_VIEW.STTR_TERM
ORDER BY TERMS.TERM_END_DATE DESC,STUDENT_TERMS_VIEW.STTR_STUDENT)
GROUP BY STUDENT_TERMS_VIEW.STTR_STUDENT
答案 1 :(得分:0)
您的查询获得了(STTR_STUDENT
和STTR_TERM
)组合的最大值。如果您只想获得每个学生的最长期限,则只应GROUP BY STUDENT_TERMS_VIEW.STTR_STUDENT
。请尝试以下查询。
SELECT stv.STTR_STUDENT, MAX(t.TERM_END_DATE)
FROM STUDENT_TERMS_VIEW stv
JOIN TERMS t ON t.TERMS_ID = stv.STTR_TERM
GROUP BY stv.STTR_STUDENT
如果您还需要获得该字词,请将其加入STUDENT_TERMS_VIEW
和TERMS
。
SELECT s.STTR_STUDENT, s.STTR_TERM, t.TERM_END_DATE
FROM (
SELECT stv.STTR_STUDENT, MAX(t.TERM_END_DATE) AS 'MaxDate'
FROM STUDENT_TERMS_VIEW stv
JOIN TERMS t ON t.TERMS_ID = stv.STTR_TERM
GROUP BY stv.STTR_STUDENT
) a
JOIN STUDENT_TERMS_VIEW s ON s.STTR_STUDENT = a.STTR_STUDENT
JOIN TERMS t ON t.TERMS_ID = s.STTR_TERM AND t.TERM_END_DATE = a.TERM_END_DATE