Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

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]

  • Administradores
Postado

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 !!

  • Membros Pro
Postado

 

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]

  • Moderadores
Postado

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

 

  • Curtir 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
 

 

  • Membros Pro
Postado
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]

  • Membros Pro
Postado

@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]

  • Moderadores
Postado

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

 

  • Curtir 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
 

 

  • Moderadores
Postado
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)

 

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

Projeto ACBr

 

 

  • Este tópico foi criado há 1569 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.