2013-11-22 3 views
0

Я пытаюсь получить предварительные оценки и предыдущую дату тестирования учащегося в том же запросе. Мой текущий запрос работает нормально до тех пор, пока предыдущий балл не упадет ровно на 28-дневную разницу. Вопрос заключается в том, когда баллы падают на 29,30 или 31 день. Вот мой текущий запрос:Получение предварительных результатов теста по тому же запросу

SELECT 
a.STUDENTID, 
b.CURRENTSCORE, 
b.CURRENTSCOREDT, 
    (select CURRENTSCORE 
     from SCORES 
     where STUDENT = a.STUDENTID 
     and ENDDTE=trunc(a.DATECOL)-28 
     and COURSE=b.COURSE and rownum =1 
     ) as PRIORSCORE, 
trunc(b.ENDDTE)-28 as PRIORCOREDT, 
b.COURSE 
FROM 
    TABLE1 a, 
    SCORES b 
WHERE 
TRUNC(a.DATECOL) = (SELECT MAX(TRUNC(ENDDTE)) 
         FROM SCORES 
        ) 
and a.STUDENTID = b.STUDENT 
and b.COURSE='Course1'; 

Как это можно сделать немного более динамичным, так что я получить предыдущие оценки, независимо от того, когда был взят экзамен/тест.

+0

Пожалуйста, покажите таблицы схемы, и некоторые выборочные данные. – OldProgrammer

ответ

-1

Я думаю, что что-то подобное может работать:

with rankedscores as (
(select 
     scores.*, 
     rank() over (partition by studentid order by datecol desc) daterank 
from 
     scores 
where 
     COURSE='Course1' 
) 
select 
     a.STUDENTID,  
     b.CURRENTSCORE, 
     b.CURRENTSCOREDT, 
     c.CURRENTSCORE priorscore, 
     c.CURRENTSCOREDT priorscoredt 
from 
     table1 a, 
     rankedscores b, 
     rankedscores c 
where 
     a.STUDENTID = b.student(+) and 
     a.STUDENTID = c.student(+) and 
     nvl(b.daterank,1) = 1 and 
     nvl(c.daterank,2) = 2 

(Не проверено ...)

+0

Хм. Почему -1? Я что-то пропустил? –

+0

Я не сделал это. Не уверен, почему он получил -1. – Ram

Смежные вопросы