Получить рейтинг на основе того, какие строки импортируются - PullRequest
0 голосов
/ 19 сентября 2018

Мне нужно закончить это таким образом, чтобы, когда бы ни импортировался студенческий класс и имел связанный раздел, ему приходилось соответствовать его определенному разряду.

DROP PROCEDURE IF EXISTS sp_test;
Delimiter $$
CREATE PROCEDURE sp_Student_Classs1() 
BEGIN
DECLARE done, doneX int default 0; 
DECLARE var_Student_Class_IDX, var_importedX, var_SectionX, var_form_idX, rnX int;  -- curX variables;
DECLARE var_Student varchar(255);   
DECLARE curA CURSOR FOR select Student_id from temp_Students;
DECLARE continue handler FOR NOT FOUND SET done = 1;
Open curA;

WHILE (done = 0) do   -- curA while
FETCH NEXT FROM curA INTO var_Student;
if done = 0 then      -- curA if
drop table if exists temp_table;
set @create_imported =  concat('create table temp_table (select pp.Student_Class_ID, usi.imported, usi.Section, usi.form_id,  pp.last_update_date, ''null'' as rn ', 
        ' from Student_Classs pp left join ui_sections usi on usi.Instance_ID = pp.Student_Class_ID where pp.Student_ID = ', var_Student, ' order by pp.last_update_date)' );
        select @create_imported;      PREPARE stmt_name FROM @create_imported;     EXECUTE Stmt_name;     DEALLOCATE prepare stmt_name;
        begin
        declare curX CURSOR FOR select Student_Class_ID, imported, Section, form_id, rn from temp_table;
        DECLARE continue handler FOR NOT FOUND SET doneX = 1;
        open CurX;
        set doneX = 0; set @rn = 1;
        while (doneX = 0) do
        FETCH NEXT FROM curX into var_Student_Class_IDX, var_importedX, var_SectionX, var_form_idX, rnX;
        if doneX = 0 then 
        if (var_imported in (select SectionID from temp_table)) or (var_Section_X in (select imported from temp_table)) 
        then
        set @insertX = concat('update temp_table set rn = ', @rn, ' where Student_Class_ID = ',var_Student_Class_IDX);  select @insertX;
         PREPARE stmt_name FROM @insertX;     EXECUTE Stmt_name;     DEALLOCATE prepare stmt_name;
          else 
          set @rn = @rn+1;
          set @insertX = concat('update temp_table set rn = ', @rn, ' where Student_Class_ID = ',var_Student_Class_IDX);  select @insertX;        
        end if;
        end if;
        end while;
        close CurX;
        end;

Я могу получить первыйПозиция 1 для первых 3 строк, но затем она увеличивается как 2,3, но она должна просто оставаться на уровне 2,2,2.В зависимости от того, что я могу получить эту логику правильно?

Результат должен выглядеть следующим образом:

Section Imported    Student_Class   Student form    Rank
720      (null)      630              111     4       1
935       493        584              111     5       1
493       720        733              111     6       1
38         6         988              111     4       2
6       (null)       986              111     3       2
459       38         531              111     2       2

265       (null)     704               25     3       1
547       (null)     692               25     1       2

Можете ли вы помочь мне с этим?

...