Попытка вытащить 2 поля при использовании MIN (CASE когда ... или MAX (CASE когда - PullRequest
0 голосов
/ 10 мая 2018

Мне нужен минимальный / максимальный балл, а также дата, когда были взяты эти баллы.Любые идеи о том, как сделать это с помощью Oracle SQL?Вот полный код, который работает и дает мне имя ученика и т. Д., А также минимальные баллы и 1 максимальный балл:

SELECT s.lastfirst, s.state_studentnumber, s.grade_level, s.schoolid, 
MIN(case when ts.name='ACT_English' then sts.numscore else null end) ACT_English, 
MIN(case when ts.name='ACT_Reading' then sts.numscore else null end) ACT_Reading, 
MIN(case when ts.name='ACT_Math' then sts.numscore else null end) ACT_Math, 
MIN(case when ts.name='ACT_Science' then sts.numscore else null end) ACT_Science, 
MAX(case when ts.name='ACT_Composite' then sts.numscore else null end) ACT_Composite
FROM studenttestscore sts
INNER JOIN students s
ON sts.studentid=s.id
INNER JOIN studenttest st
ON sts.studenttestid=st.id
INNER JOIN testscore ts
ON sts.testscoreid=ts.id
INNER JOIN test t
ON ts.testid=t.id
WHERE t.name='ACT' AND s.enroll_status=0 and s.schoolid = 32
GROUP BY s.lastfirst, s.state_studentnumber, s.grade_level, s.schoolid
ORDER BY s.lastfirst

Поле даты находится в таблице студенческого теста (st.test_date).Заранее спасибо ...

1 Ответ

0 голосов
/ 10 мая 2018

О, вы используете Oracle. Тогда вы можете использовать keep, общий формат:

select . . .,
       max(date) keep (dense_rank first order by sts.numscore desc)

Это немного сложнее для фильтрации. Один метод использует два выражения:

select . . .,
       max(case when ts.name = 'ACT_English' then date end) keep
           (dense_rank first order by (case when t.name = 'ACT_English' then 1 else 2 end), sts.numscore desc)
           )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...