2009/6/18 Newton Teixeira do Nascimento Júnior <
[email protected]>

>  Olá comunidade,
>
>
>
> Tenho o seguinte SELECT e gostaria de otimizá-lo. Eis o mesmo:
>
>
>
> SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal,
>
> (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE
> X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID
> = B.id_eq AND bh_dthr_fim IS NULL))  AS maximo,
>
> (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE
> X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID
> = B.id_eq AND bh_dthr_fim IS NULL))/B.nominal)*100 AS AS Percent,
>
> CAST('2009_05_01' as DATE) as Data
>
> FROM "EQUIPAMENTOS" AS A, "IDS_EQUIPAMENTOS" AS B,
> "RELATORIOS_EQUIPAMENTOS" AS C WHERE A.eq = B.eq AND A.eq=C.eq AND
> C.nome_relatorio='ICE' ORDER BY percent DESC;
>
>
>
> **** (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE
> X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID
> = B.id_eq AND bh_dthr_fim IS NULL))  AS Maximo
>
> O sub-select acimal calcula um determinado valor Maximo; tenho também que
> mostrar em outra coluna o percentual obtido, o qual é o
> (Maximo/nominal)*100; Para rodar, estou tendo que executar duas vezes o
> mesmo sub-select que retorna o mesmo resultado para mostrar os dados que são
> necessários e isso tem deixado a consulta lenta.
>
>
>
> Gostaria de ficasse assim:
>
>
>
> SELECT A.eq, B.id_eq, B.unidade, B.tensao_equip, B.nominal,
>
> (SELECT MAX(Y.VALOR) FROM PAS_R X, bhpas_h_2009_05_01 Y WHERE
> X.BH_CHAVE=Y.BH_CHAVE AND Y.BH_CHAVE = (SELECT BH_CHAVE FROM PAS_R WHERE ID
> = B.id_eq AND bh_dthr_fim IS NULL))  AS maximo,
>
> (maximo/B.nominal)*100 AS AS Percent,
>
> CAST('2009_05_01' as DATE) as Data
>
> FROM "EQUIPAMENTOS" AS A, "IDS_EQUIPAMENTOS" AS B,
> "RELATORIOS_EQUIPAMENTOS" AS C WHERE A.eq = B.eq AND A.eq=C.eq AND
> C.nome_relatorio='ICE' ORDER BY percent DESC;
>
>
>
> Porém quando eu executo dessa forma o seguinte erro é exibido:
>
> ERRO:  coluna "maximo" não existe
>
> LINE 5: (maximo/B.nominal)*100 AS Percent,
>
>          ^
>




Creio que na versão 8.4 você poderá utilizar a cláusula WITH para
simplificar queries deste tipo.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a