SUM COM CRITERIO DE SEMANA

SQL

Oracle PL SQL

07/06/2019

Como eu faço uma query utilizando a seguinte ideia, preciso somar intervalos de data de 7 em 7 dias, para apresentar esses dados em B.I (gráfico)
Ex.

01 a 07/06
14/06 a 22/06
23/06 a 30/06

Sem ter que utilizar o CASE, uma forma automatica. E possivel?
Mario Castilho

Mario Castilho

Curtidas 0

Respostas

Thiago Moreno

Thiago Moreno

07/06/2019

Como eu faço uma query utilizando a seguinte ideia, preciso somar intervalos de data de 7 em 7 dias, para apresentar esses dados em B.I (gráfico)
Ex.

01 a 07/06
14/06 a 22/06
23/06 a 30/06

Sem ter que utilizar o CASE, uma forma automatica. E possivel?

voce vai usar um select para cada semana fazer um union desses selects. Esse exemplo é para mysql. Ele pega o dia atual calculando as 4 ultimas semanas. Esse select é fixo. pega sempre as 4 ultimas semanas. Mas voce pode adapta-lo agrupando pela funcao week e passando seu intervalo de datas, para ele quebrar pelo numero da semana.

-- semana 1
select WEEK(curdate(), 0) semana,
   date_format(adddate(curdate(), 6 * -1), '%d/%m/%y') diainiciosemana,
   date_format(adddate(curdate(), 0 * -1), '%d/%m/%y') diafimsemana, ifnull(sum(valor_venda), 0) as valor            
from venda            
where data_venda between adddate(curdate(), 6 * -1) and adddate(curdate(), 0 * -1)

union all  
          
-- semana 2
select week(adddate(curdate(), 7 * -1), 0) semana,
   date_format(adddate(curdate(), 13 * -1), '%d/%m/%y') diainiciosemana,
   date_format(adddate(curdate(), 7 * -1), '%d/%m/%y') diafimsemana, ifnull(sum(valor_venda), 0) as valor
from venda           
where data_venda between adddate(curdate(), 13 * -1) and adddate(curdate(), 7 * -1)

union all 

-- semana 3
select week(adddate(curdate(), 14 * -1), 0) semana,
   date_format(adddate(curdate(), 20 * -1), '%d/%m/%y') diainiciosemana,
   date_format(adddate(curdate(), 14 * -1), '%d/%m/%y') diafimsemana, ifnull(sum(valor_venda), 0) as valor
from venda           
where data_venda between adddate(curdate(), 20 * -1) and adddate(curdate(), 14 * -1)

union all           

-- semana 4
select week(adddate(curdate(), 21 * -1), 0) semana,
   date_format(adddate(curdate(), 27 * -1), '%d/%m/%y') diainiciosemana,
   date_format(adddate(curdate(), 21 * -1), '%d/%m/%y') diafimsemana, ifnull(sum(valor_venda), 0) as valor
from venda           
where data_venda between adddate(curdate(), 27 * -1) and adddate(curdate(), 21 * -1)


GOSTEI 0
Mario Castilho

Mario Castilho

07/06/2019

Como que vc faria nesse select

SELECT

COD_EMPR,
TO_CHAR(cont_dia_balanca,'DD/MM/YYYY') AS CONT_DIA_BALANCA,
sum(Liqui)Liqui


FROM TAB_FRC_ENTRAD_CL


Where cod_empr not in ('10')
AND CONT_DIA_BALANCA >='01/01/2019'
and din_frente_1 not in ('2034','2035','2036')
group by COD_EMPR,
cont_dia_balanca
GOSTEI 0
Thiago Moreno

Thiago Moreno

07/06/2019

Como que vc faria nesse select

SELECT

COD_EMPR,
TO_CHAR(cont_dia_balanca,'DD/MM/YYYY') AS CONT_DIA_BALANCA,
sum(Liqui)Liqui


FROM TAB_FRC_ENTRAD_CL


Where cod_empr not in ('10')
AND CONT_DIA_BALANCA >='01/01/2019'
and din_frente_1 not in ('2034','2035','2036')
group by COD_EMPR,
cont_dia_balanca


qual é o banco de dados?? como eu falei aquele exemplo é com mysql pq ele tem as funcoes que retornam a semana e que manipulam data, tem que ver quais sao essas funcoes do seu banco de dados.
GOSTEI 0
Jesus Lima

Jesus Lima

07/06/2019

Como que vc faria nesse select

SELECT

COD_EMPR,
TO_CHAR(cont_dia_balanca,'DD/MM/YYYY') AS CONT_DIA_BALANCA,
sum(Liqui)Liqui


FROM TAB_FRC_ENTRAD_CL


Where cod_empr not in ('10')
AND CONT_DIA_BALANCA >='01/01/2019'
and din_frente_1 not in ('2034','2035','2036')
group by COD_EMPR,
cont_dia_balanca


Veja se dessa forma te ajuda

SELECT 
COD_EMPR,
--TO_CHAR(cont_dia_balanca,'DD/MM/YYYY') AS CONT_DIA_BALANCA,
to_char(CONT_DIA_BALANCA,'W') as NUMERO_SEMANA,
sum(Liqui)Liqui
FROM TAB_FRC_ENTRAD_CL 
Where cod_empr not in ('10')
AND CONT_DIA_BALANCA >='01/01/2019'
and din_frente_1 not in ('2034','2035','2036')
group by COD_EMPR,to_char(CONT_DIA_BALANCA,'W')
GOSTEI 0
POSTAR