2010-12-21 16 views
5

Tengo una pieza de SQL que resuelve el rango de un golfista en la clasificación. Soy bastante nuevo en Spring y no creo que pueda ejecutar esto usando Spring JDBC, así que creo que necesito convertirlo a un procedimiento almacenado mySQL.Convertir la instrucción SQL en mySQL almacenó el procedimiento

¿Alguien puede darme algunos consejos sobre lo que necesito convertir? Simplemente poner CREATE PROCEDURE y la lista de parámetros alrededor de esto no funciona.

SET @rank = 1, @prev_val = NULL, @prev_rank = NULL; 
SELECT rank FROM 
(
SELECT @rank := IF(@prev_val!=winnings,@prev_rank+1,@rank) AS rank 
    , @prev_val := winnings AS winnings 
    , @prev_rank := @rank AS prevRank 
    , t.golferID 
    FROM 
    (
     select g.golferID, sum(winnings) as winnings 
     from results r 
     join resultDetails rd on r.resultID = rd.resultID 
     join golfers g on rd.golferID = g.golferID 
     where r.status = 'C' and r.compID = 1 
     group by golferID order by winnings desc 
    ) AS t 
) AS showRank WHERE golferID = 16 
+1

Deberías aceptar una respuesta, Paul. La idea es marcar las respuestas correctas y más útiles aquí. –

Respuesta

1

esto le ayudará a empezar:

drop procedure if exists get_golfer_rank; 

delimiter # 

create procedure get_golfer_rank 
(
p_golferID int unsigned 
) 
proc_main:begin 

set @rank = 0; 

select 
... 
where golferID = p_golferID; 

end proc_main # 

delimiter ; 


call get_golfer_rank(18); 
0

Gracias por los clientes potenciales. Lo resolví. En términos generales es

drop procedure if exists getRank; 

delimiter $$ 

create procedure getRank() 
begin 

    set @rank = 1; 
    set @prev_val = NULL; 
    set @prev_rank = NULL; 

    select rank from 
    (
    select @rank := if(@prev_val!=winnings,@prev_rank+1,@rank) as rank 
     , @prev_val := winnings as winnings 
     , @prev_rank := @rank as prevrank 
     , t.golferid 
     from 
     (
      select g.golferid, sum(winnings) as winnings 
      from results r 
      join resultdetails rd on r.resultid = rd.resultid 
      join golfers g on rd.golferid = g.golferid 
      where r.status = 'c' and r.compid = 1 
      group by golferid order by winnings desc 
     ) as t 
    ) as showrank where golferid = 16; 

end; $$ 

delimiter ; 
+0

¿no quieres pasar una identificación de jugador de golf como param? –

1

su trabajo a cabo está bien - F00 había asumido que usted quiere sólo para llamar a cada uno de los golfistas clasifican a través de un parámetro determinado - por lo tanto la construcción ...

create procedure get_golfer_rank 
(
p_golferID int unsigned 
) 

y ..

where golferID = p_golferID; 

restringe a un solo golfista.

Cuestiones relacionadas