Jump to content

dev botao

Consulta registros de um intervalo de datas


Rodrigo Cardilo
  • Este tópico foi criado há 1518 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Bom dia amigos,

Preciso fazer uma consulta numa tabela do meu banco de dados com as seguintes características:

Tabela de apartamentos disponíveis na data (DISPONIVEL = SITUACAO = 0)

CODAPTO    DATA    SITUACAO  
101    16/09/2020    0    
101    17/09/2020    0    
101    18/09/2020    0    
101    19/09/2020    0    
101    20/09/2020    0    
101    21/09/2020    0    
101    22/09/2020    0    

102    11/09/2020    0 
102    12/09/2020    0 
102    13/09/2020    0 
102    14/09/2020    0 
102    15/09/2020    0 
102    16/09/2020    0 
102    17/09/2020    0 
102    18/09/2020    0 
102    19/09/2020    0 
102    20/09/2020    0 

Preciso de um select para saber quais apartamentos estão disponíveis (SITUACAO = 0) no período de 12/09/2020 a 18/09/2020.

Já tentei usando between  e outro código porém eles me retornam os aptos 101 e 102 e no caso só estaria disponível o apartamento 102.

select CODAPTO  from APTO_DIPOSNIVEL
WHERE  DATA >= '09/12/2020' AND data <= '09/20/2020'
AND SITUACAO = 0
select CODAPTO  from UN10150
WHERE DATA BETWEEN '09/12/2020' AND '09/20/2020'
AND SITUACAO = 0

Se alguém puder me ajudar fico agradecido.
 

 

Rodrigo Cardilo

Card System Info

[email protected]

Link to comment
Share on other sites

  • Administradores

Boa tarde.

Conseguiu resolver?

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link to comment
Share on other sites

  • Membros Pro

 

1 hora atrás, Juliana Tamizou disse:

Boa tarde.

Conseguiu resolver?

Att.

Oi @Juliana Tamizou ainda não.

Me ajudaram  com o código abaixo em outro post mas não consegui adaptar à minha tabela.

WITH RECURSIVE
DATES (DT) AS (
SELECT CURRENT_DATE
FROM RDB$DATABASE
UNION ALL
SELECT DT + 1 FROM DATES
WHERE DT < CURRENT_DATE + 31
)
SELECT DT FROM DATES

Se alguém souber fico agradecido

Obrigado

Rodrigo Cardilo

Card System Info

[email protected]

Link to comment
Share on other sites

  • Moderadores

Algo assim

WITH RECURSIVE date_range AS (
    SELECT date'2019-01-03' dateval 
    FROM rdb$database
    UNION ALL 
    SELECT dateval + 1
    FROM date_range
    WHERE dateval < date'2019-01-09' 
)
SELECT *
FROM date_range
LEFT JOIN APTO_DIPOSNIVEL 
  ON date_range.dateval = APTO_DIPOSNIVEL.DATA
select CODAPTO  from 
WHERE  
 SITUACAO = 0

 

  • Like 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Link to comment
Share on other sites

  • Membros Pro
Em 01/08/2020 at 08:49, Juliomar Marchetti disse:

Algo assim


WITH RECURSIVE date_range AS (
    SELECT date'2019-01-03' dateval 
    FROM rdb$database
    UNION ALL 
    SELECT dateval + 1
    FROM date_range
    WHERE dateval < date'2019-01-09' 
)
SELECT *
FROM date_range
LEFT JOIN APTO_DIPOSNIVEL 
  ON date_range.dateval = APTO_DIPOSNIVEL.DATA
select CODAPTO  from 
WHERE  
 SITUACAO = 0

 

Amigo @Juliomar Marchetti

Entendi sua lógica porém o final do código não consegui entender. Vou colocar abaixo a procedure que tentei gerar usando seu exemplo... Coloquei interrogação no trecho onde eu travei.

Grato desde já,

 

CREATE PROCEDURE SP_DATES(
  DTINI DATE,
  DTFIM DATE)
RETURNS(
  CODAP INTEGER)
AS
begin
FOR WITH RECURSIVE
DATES (DT) AS (
SELECT :DTINI 
FROM RDB$DATABASE
UNION ALL
SELECT DT + 1 FROM DATES
WHERE DT < :DTFIM
)
SELECT * FROM DATES
LEFT JOIN UN10150 R ON DATES.DT = R.DATA
???????????????????
select CODAPTO from  WHERE SITUACAO = 0
INTO :CODAP DO
suspend;
end

 

Rodrigo Cardilo

Card System Info

[email protected]

Link to comment
Share on other sites

  • Membros Pro

@Juliomar Marchetti alterei aqui e deu certo, porém o problema inicial ainda persiste. 

No meu exemplo acima eu tenho dois apartamentos e quando faço essa consulta entre  12/09/2020 a 18/09/2020 precisaria que só me retornasse o 

apartamento disponível em todos esses dias, o que não acontece com o 101 já que ele não tem disponibilidade nos dias 12, 13, 14 e 15.

Mesmo assim obrigado pela ajuda.

Rodrigo Cardilo

Card System Info

[email protected]

Link to comment
Share on other sites

  • Membros Pro
Em 07/08/2020 at 18:33, Juliomar Marchetti disse:

Tu consegue disponibilizar uma base pequena com poucos dados pra que possa rodar do lado de cá e conseguir simular?

@Juliomar Marchetti, coloquei um banco em anexo. Nele tem exatamente o exemplo que postei no começo desse post. 

Grato

BDTESTE.rar

Rodrigo Cardilo

Card System Info

[email protected]

Link to comment
Share on other sites

  • Moderadores

Funcionou o SQL acima com ajustes veja e me trouxe todos os apt com preenchimento de todas as datas que coloquei no intervalo

WITH RECURSIVE date_range AS (
    SELECT date'01.09.2020' dateval 
    FROM rdb$database
    UNION ALL 
    SELECT dateval + 1
    FROM date_range
    WHERE dateval < date'30.09.2020' 
)
SELECT 
	apto.CODAPTO ,
	date_range.dateval,
	apto.SITUACAO 
FROM date_range
left JOIN APTO 
  ON date_range.dateval = APTO.DATA
ORDER BY codapto,data

 

  • Like 2
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Link to comment
Share on other sites

  • Moderadores
Em 24/07/2020 at 09:56, Rodrigo Cardilo disse:

Preciso de um select para saber quais apartamentos estão disponíveis (SITUACAO = 0) no período de 12/09/2020 a 18/09/2020.

Acho que seria isso aqui:

select CODAPTO
, count(iif(SITUACAO = 0, 1, null)) QT_DIAS_DISPON
from APTO
where DATA between :DTINI and :DTFIM
group by 1
having count(iif(SITUACAO = 0, 1, null)) = (cast(:DTFIM as DATE) - cast(:DTINI as DATE) + 1)

 

  • Like 2
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

  • Este tópico foi criado há 1518 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...