Kakao

Membros
  • Content Count

    468
  • Joined

  • Last visited

Community Reputation

0 Neutro

About Kakao

Contatos

  • Website URL
    http://webpython.codepoint.net

Perfil

  • Gender
    Male
  • Location
    Brasília

Recent Profile Visitors

3182 profile views
  1. Você usou o pg_dump da versão 8.4? Tem que usar sempre o da versão mais recente.
  2. Não é necessário fazer concatenação: select '1970-01-01 00:00:00'::timestamp + 1342207440.00000000 * interval '1 second'; ?column? --------------------- 2012-07-13 19:24:00
  3. Mostre como você conecta na base. No psql mostre a saída do comando \l
  4. Não é possível restringir a estrutura das tabelas.
  5. Luis, eu só vi agora que você editou a última pergunta. Então fica assim: create or replace function compare_vendas( range_1 daterange, range_2 daterange ) returns table( nome text, codpro text, quant_range_1 bigint, valor_range_1 numeric, quant_range_2 bigint, valor_range_2 numeric ) as $$ select p.nome, p.codpro, sum(v.pecas * (v.data <@ range_1)::int), sum(v.valortotal * (v.data <@ range_1)::int), sum(v.pecas * (v.data <@ range_2)::int), sum(v.valortotal * (v.data <@ range_2)::int) from public.fato_vendas_franquias v inner join public.dim_produto p on p.sk_codpro = v.sk_codpro where v.data <@ range_1 or v.data <@ range_2 group by p.nome, p.codpro order by p.codpro asc; $$ language sql; Estou supondo que fato_vendas_franquias.data seja to tipo date. O tipo daterange com suas funções facilita este tipo de comparação. Se for construir a chamada manualmente é mais fácil fazer o cast select * from compare_vendas( '[2013-05-01, 2013-05-15]'::daterange, '[2014-05-01, 2014-05-15]'::daterange ); Se for passar os parâmetros pelo cliente é melhor usar o construtor select * from compare_vendas( daterange('2013-05-01'::date, '2013-05-15'::date, '[]'), daterange('2014-05-01'::date, '2014-05-15'::date, '[]') );
  6. Aí tem que ser função: create or replace function compare_vendas(ano_1 int, ano_2 int) returns table( nome text, codpro text, quant_ano_1 bigint, valor_ano_1 numeric, quant_ano_2 bigint, valor_ano_2 numeric ) as $$ select p.nome, p.codpro, sum(v.pecas * (extract(year from v.data) = ano_1)::int), sum(v.valortotal * (extract(year from v.data) = ano_1)::int), sum(v.pecas * (extract(year from v.data) = ano_2)::int), sum(v.valortotal * (extract(year from v.data) = ano_2)::int) from public.fato_vendas_franquias v inner join public.dim_produto p on p.sk_codpro = v.sk_codpro where v.data >= ano_1::text || '-01-01' and v.data < (ano_2 + 1)::text || '-01-01' group by p.nome, p.codpro order by p.codpro asc; $$ language sql; Se necessário substitua os tipos das colunas retornadas pela função pelos tipos adequados. Para chamar: select * from compare_vendas(2014, 2015);
  7. select p.nome, sum(v.pecas * (extract(year from v.data) = 2014)::int) as quant2014, sum(v.valortotal * (extract(year from v.data) = 2014)::int) as valor2014, sum(v.pecas * (extract(year from v.data) = 2015)::int) as quant2015, sum(v.valortotal * (extract(year from v.data) = 2015)::int) as valor2015 from public.fato_vendas_franquias v inner join public.dim_produto p on p.sk_codpro = v.sk_codpro where v.data >= '2014-01-01' and v.data < '2016-01-01'
  8. create or replace function ibge_dv(codigo char(6)) returns char(1) as $$ select ((10 - resto) * (resto != 0)::int)::char(1) from ( select ( a135 + left(a2, 1)::int + right(a2, 1)::int + left(a4, 1)::int + right(a4, 1)::int + left(a6, 1)::int + right(a6, 1)::int ) % 10 as resto from ( select a[1] + a[3] + a[5] as a135, to_char(a[2] * 2, 'FM09') as a2, to_char(a[4] * 2, 'FM09') as a4, to_char(a[6] * 2, 'FM09') as a6 from ( select string_to_array(codigo, null)::integer[] as a ) s ) s ) s ; $$ language sql; select ibge_dv('355030'); ibge_dv --------- 8
  9. Mostre o algoritmo de cálculo
  10. Parece que é mais ou menos isso: select q.agent, q.queuename as queuename, rm.nome as Agent, count(event like '%ABANDON%' or null) as perdida, count(event like '%COMPLETE%' or null) as atendida, count(event = 'TRANSFER' or null) as transferida, from queue_log q inner join f_ramal_virtual rm on rm.ramal_virtual = q.agent where q.event != 'RINGNOANSWER' and (${prmnomefila} is null or q.queuename = ${prmnomefila}) and array[ time::date = current_date - 1, time::date = current_date - 7, time::date = current_date - 30, time::date between ${prmdatainicial} and ${prmdatafinal} ][${prmintervalo}] group by 1, 2, 3
  11. Faça: show time zone;O tipo do campo é timezone e não timezonetz. Para mostrar em uma determinada time zone use: select create_at at time zone 'brt';
  12. Poste o resultado: select created_at, created_at at time zone 'utc' from minha_tabela limit 1;
  13. where date_trunc('month', arte.artedataregistro) = date_trunc('month', current_date - interval '1 month')
  14. Como você pode ver na minha consulta o valor é 3 o que está correto. Inclua o valor passado no parâmtro na lista do select para ver se não há nenhum problema de codificação.
  15. No order by você está comparando só o nome: levenshtein(upper(nome), upper('1721333100PSF - Programa de Saúde da Família')) Para evitar este tipo de erro use o posicionamento da coluna no order by: with naturezareceitasiga(id, codigo, nome) as ( values (1, '1721333100PSF', 'Programa de Saúde da Família') ) select levenshtein(upper(nrs.codigo || nrs.nome), upper('1721333100PSF - Programa de Saúde da Família')) as ctrl, coalesce(nrs.id,0) as id, nrs.nome, upper(nrs.codigo || nrs.nome) as nomeNatRecSiga from naturezareceitasiga nrs order by 1 ; ctrl | id | nome | nomenatrecsiga ------+----+------------------------------+------------------------------------------- 3 | 1 | Programa de Saúde da Família | 1721333100PSFPROGRAMA DE SAÚDE DA FAMÍLIA