Me he quedado atascado en este error durante 2 horas.

He anidado la selección para obtener el primer valor.

select tbl.table_name,
       (select distinct(FirstItem)
       from
           (select first_value(column_name) over (order by timestamp asc rows unbounded predecing) as FirstItem
           from log_table_b l
           where tbl.assignment_no = l.rpt_no)
       ) as "USERNAME",
from prod_table tbl;

Devuelve este error:

ERROR at line 6:
ORA-00904: "TBL"."ASSIGNMENT_NO": invalid identifier

He probado muchas cosas, pero ninguna parece ayudarme.

4
user206168 20 feb. 2015 a las 19:53

2 respuestas

La mejor respuesta

No puede usar la tabla principal en la subconsulta interna. Aquí cómo podría lograr esto:

with tmp_table as 
(
    select rpt_no, first_value(column_name) over (order by timestamp asc rows unbounded predecing) as FirstItem
    from log_table_b l
) select distinct tbl.table_name, firstItem
from prod_table tbl
join tmpTable on tmp_table.rpt_no = tbl.assignment_no;

Es posible que desee encontrar un nombre más descriptivo para tmp_table

4
Jean-François Savard 23 feb. 2015 a las 19:05

El problema es que solo puede pasar una referencia de una consulta externa al siguiente nivel de subconsulta.

Aquí hay un par de alternativas:

select tbl.table_name,
       (select min(column_name) keep (dense_rank first order by tstamp asc)
        from   log_table_b l
        where  tbl.assignment_no = l.rpt_no
       ) as "USERNAME"
from   prod_table tbl;

select tbl.table_name,
       l.username
from   prod_table tbl
       inner join (select rpt_no,
                          min(column_name) keep (dense_rank first order by tstamp asc) username
                   from   log_table_b l
                   group by rpt_no)
         on (tbl.assignment_no = l.rpt_no);

Nótese bien no probado

0
Boneist 20 feb. 2015 a las 17:15