select incremental
Pessoal bom dia.
Eu tenho um select que atualmente demora 2h para executar.
Esse select varre uma tabela de aproximadamente 6684251 registros, e aumentando rs.. E popula um nova tabela, de onde crio alguns gráficos e etc...
Eu gostaria de criar um select que retornasse apenas os registros novos dessa tabela gigante.
Pensei em fazer isso colocando um filtro de data, mas teria que ser algo do tipo, retornar os dados da última data e hora de execução.
O problema, é que se uma nota for cancelada, corro o risco de não saber disso, pois já teria buscado esse registro em outra data, e não seria retornada novamente. Alguém tem uma ideia de como posso fazer isso?
Abaixo o select que faço.
------------Insert da tabela com todas as notas faturadas de saida-------------------------------------------------
DELETE [Repositorio_Padtec].[dbo].Tabela_NF_Faturada;
--INSERT INTO [Repositorio_Padtec].[dbo].Tabela_NF_Faturada-- busca as informações de notas de faturamnto
with Faturamento as(
--busca informações de faturamento quando o tipo de item é sistema ou seja 1.000.000
select
cfop.[especie-doc],
cfop.[emite-duplic],
itnf.[cod-estabel],
itnf.[it-codigo],
descped.descricao as Descricao_Pai,
movto.[it-codigo] as Ean,
item.[desc-item]as Descricao_Filho,
itnf.[nr-pedcli],
itnf.[nome-ab-cli] as Emitente,
itnf.[dt-emis-nota],
movto.[nro-docto] as [nr-nota-fis],
cast (movto.[valor-nota]as float(2)) as valor_nota,
cast (itnf.[cod-unid-negoc] as varchar(300)) as PP,
cast(round(movto.quantidade,2)as float(2)) as Quantidade,
cast(itnf.[vl-tot-item] /
(SUM((CASE WHEN movto.[valor-mat-m] IS NULL
THEN '1'
WHEN movto.[valor-mat-m] = '0' THEN '1'
ELSE movto.[valor-mat-m] END))
OVER (PARTITION BY movto.[nro-docto],itnf.[dt-emis-nota], movto.[sequen-nf])
+ SUM(ISNULL(movto.[valor-ggf-m], '0'))
OVER (PARTITION BY movto.[nro-docto],itnf.[dt-emis-nota], movto.[sequen-nf]))
* CASE WHEN movto.[valor-mat-m] IS NULL
THEN '1'
WHEN movto.[valor-mat-m] = '0'
THEN '1'
ELSE (movto.[valor-mat-m] + ISNULL(movto.[valor-ggf-m], '0'))
END
as float(2)) AS TOTAL,
'' as [ggf],
'' as [sOMA_CUSTO_GGF],
'' as [CUSTO],
'' as [FAMILIA],
'' as [NF_Devolvida],
movto.[nat-operacao]
from
Repositorio_Padtec.dbo.item item
left join
Repositorio_Padtec.dbo.[movto-estoq] movto on item.[it-codigo] = movto.[it-codigo]
inner join
Repositorio_Padtec.dbo.[it-nota-fisc] itnf on itnf.[cod-estabel] = movto.[cod-estabel]
and itnf.[cd-emitente] = movto.[cod-emitente]
and itnf.[nat-operacao] = movto.[nat-operacao]
and itnf.[nr-seq-fat] = movto.[sequen-nf] --??
and (itnf.serie = movto.[serie-docto]
or ISNULL(movto.[serie-docto], '') = ISNULL(itnf.serie, ''))
and itnf.[nr-nota-fis] = movto.[nro-docto]
and itnf.[it-codigo] like '1.%'
and movto.[it-codigo] not like '1.%'
left join
Repositorio_Padtec.dbo.[natur-oper]cfop on itnf.[nat-operacao] = cfop.[nat-operacao]
left join
[Repositorio_Padtec].[dbo].[ext_ped_item]descped on descped.it_codigo = itnf.[it-codigo]
and descped.nr_pedcli = itnf.[nr-pedcli]
and descped.sequencia = itnf.[nr-seq-ped]
and descped.nome_abrev = itnf.[nome-ab-cli]
and itnf.[dt-cancela] is null
where
itnf.[nr-nota-fis] = movto.[nro-docto]
and itnf.[cod-estabel] = 1
and ((itnf.[it-codigo] like '1.000.%')
or (movto.[it-codigo] = itnf.[it-codigo]))
and cfop.[emite-duplic] = 1
and cfop.[especie-doc] = 'NFS'
and itnf.[dt-cancela] is null
--
union all
--busca informações de sistema para itens diferentes de sistema.
select
cfop.[especie-doc],
cfop.[emite-duplic],
itnf.[cod-estabel],
itnf.[it-codigo],
descped.descricao as Descricao_Pai,
itnf.[it-codigo] as Ean,
item.[desc-item]as Descricao_Filho,
itnf.[nr-pedcli],
itnf.[nome-ab-cli] as Emitente,
itnf.[dt-emis-nota],
itnf.[nr-nota-fis],
cast(itnf.[vl-tot-item] as float(2)) as valor_nota,
itnf.[cod-unid-negoc] as PP,
cast(round(peditem.[qt-atendida],2)as float(2)) as Quantidade,
cast(itnf.[vl-tot-item] as float(2)) as TOTAL,
'' as [ggf],
'' as [sOMA_CUSTO_GGF],
'' as [CUSTO],
'' as [FAMILIA],
'' as [NF_Devolvida],
itnf.[nat-operacao]
from
Repositorio_Padtec.dbo.item item
right join
Repositorio_Padtec.dbo.[it-nota-fisc] itnf on itnf.[it-codigo] = item.[it-codigo]
left join
Repositorio_Padtec.dbo.[natur-oper]cfop on itnf.[nat-operacao] = cfop.[nat-operacao]
left join
[Repositorio_Padtec].[dbo].[ext_ped_item]descped on descped.it_codigo = itnf.[it-codigo]
and descped.nr_pedcli = itnf.[nr-pedcli]
and descped.sequencia = itnf.[nr-seq-ped]
and descped.nome_abrev = itnf.[nome-ab-cli]
left join Repositorio_Padtec.dbo.[ped-item] peditem on peditem.[it-codigo] = itnf.[it-codigo]
and peditem.[nr-pedcli] = itnf.[nr-pedcli]
and peditem.[nr-sequencia] = itnf.[nr-seq-ped]
and peditem.[nome-abrev] = itnf.[nome-ab-cli]
WHERE
itnf.[dt-cancela] is null
and itnf.[it-codigo] not LIKE '1.0%'
and itnf.[cod-estabel] = 1 and
cfop.[emite-duplic] = 1 and
cfop.[especie-doc] = 'NFS'
),
-- busca as informações de notas de devolução
Devolução as
(
SELECT
dev.[cod-estabel],
dev.[it-codigo] as Ean,
dev.[nome-ab-emi],
dev.[dt-devol] as Data_Emissão,
dev.[nr-nota-fis],
(-[qt-devolvida]) AS QTD ,
(CAST(-dev.[vl-devol]as float(2))) as Total,
dev.[nro-docto] as [NF_Devolvida],
dev.[nat-operacao],
dev.[nro-docto],
dev.[vl-devol]
FROM
[Repositorio_Padtec].[dbo].[devol-cli] dev
where
dev.[nr-nota-fis] is not null and
dev.[cod-estabel] = 1
)
-- busca as informações de notas faturadas juntamente com as notas de devolução
INSERT INTO [Repositorio_Padtec].[dbo].Tabela_NF_Faturada
select
fatur.[especie-doc],
fatur.[emite-duplic],
fatur.[cod-estabel],
fatur.[it-codigo],
fatur.Descricao_Pai,
fatur.Ean,
fatur.Descricao_Filho,
fatur.[nr-pedcli],
fatur.Emitente,
fatur.[dt-emis-nota],
fatur.[nr-nota-fis],
fatur.valor_nota,
fatur.PP,
fatur.Quantidade,
fatur.TOTAL,
fatur.[ggf],
fatur.[sOMA_CUSTO_GGF],
fatur.[CUSTO],
fatur.[FAMILIA],
dev.[nro-docto] as [NF_Devolvida],
fatur.[nat-operacao],
dev.[vl-devol]
from
Faturamento fatur left join
Devolução dev
on
fatur.Ean = dev.Ean and
fatur.[nr-nota-fis] = dev.[nr-nota-fis] and
fatur.Emitente = dev.[nome-ab-emi]Discussão (3)
Carregando comentários...