上次日期参加了2个SQL Server表

时间:2016-06-23 13:57:26

标签: sql-server

我搜索了论坛,但无法找到答案。所以我很抱歉,如果这是在那里。这在我看来似乎很简单,但是,我似乎无法获得正确的代码。

我有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_VIEWSTTR_STUDENTSTTR_TERM表,其中包含TERMS。我需要找到一种方法来根据TERM_END_DATE选择学生的最后一个学期,但每个学生我得到MAX(TERM_END_DATE)个重复行。我需要每位学生获得1排并且他们的最后一个学期参加。

编辑:好的,所以这两个表都由STTR_TERM链接。

View Code Here

正如您所看到的,我正在为同一个学生获取重复的TERMS,即使我正在拉TERM

View SQL Image

2 个答案:

答案 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_STUDENTSTTR_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_VIEWTERMS

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