sql - Why does using "where rownum = 1" not select the first ordered row? -
this weird, use pair of spare eyes understand what's happening.
so have query :
with x ( select num_aula, tipo_aula, min(abs(capienza-1)) score aula join ( select num_aula, tipo_aula aula tipo_aula = 'laboratorio' minus select num_aula, tipo_aula occr_lezione to_char(data_inizio_occr_lezione,'hh24:mi') = '12:30' , nome_sede = 'centro direzionale' , giorno_lezione = 2 ) using(num_aula,tipo_aula) group num_aula, tipo_aula order score asc ) select * x
wich return result set :
num tipo_aula score --- -------------------- ---------- 1 laboratorio 35 2 laboratorio 35
wich desired result.
now, if add line query :
where rownum = 1;
wich should return first row of table, :
num tipo_aula score --- -------------------- ---------- 2 laboratorio 35
how possible ?
i think query want is
with x ( select num_aula, tipo_aula, min(abs(capienza-1)) score, row_number() over(partition num_aula, tipo_aula order score asc ) seq aula join ( select num_aula, tipo_aula aula tipo_aula = 'laboratorio' minus select num_aula, tipo_aula occr_lezione to_char(data_inizio_occr_lezione,'hh24:mi') = '12:30' , nome_sede = 'centro direzionale' , giorno_lezione = 2 ) using(num_aula,tipo_aula) ) select * x x.seq = 1;
the rownum
keyword not behave think, see this article rownum.
to give more details, rownum
assigned before order given result set.
if want correct result using rownum
keyword, achieve subquery first order, generate rownum actual ordered result set. however, prefer first approach more readable in opinion, free prefer one.
select * (select num_aula, tipo_aula, min(abs(capienza-1)) score aula join ( select num_aula, tipo_aula aula tipo_aula = 'laboratorio' minus select num_aula, tipo_aula occr_lezione to_char(data_inizio_occr_lezione,'hh24:mi') = '12:30' , nome_sede = 'centro direzionale' , giorno_lezione = 2 ) using(num_aula,tipo_aula) group num_aula, tipo_aula order score asc) x x.rownum = 1;
Comments
Post a Comment