Vejam a comparação abaixo:





sql-- 1. Criando tabelas de teste simplificadas
CREATE TABLE hospedagens (hospedagem_id INT, proprietario_id INT);
CREATE TABLE alugueis (hospedagem_id INT, data_inicio DATE, data_fim DATE, preco_total DECIMAL);
-- 2. Inserindo o cenário fictício do teste
INSERT INTO hospedagens VALUES (1, 100), (2, 100);
INSERT INTO alugueis VALUES
(1, '2025-01-01', '2025-06-01', 15100), -- Imóvel 1 (Antigo)
(1, '2025-07-01', '2025-10-18', 10900), -- Imóvel 1 (Antigo)
(2, '2025-12-20', '2025-12-28', 1600); -- Imóvel 2 (Novo instalado em Dezembro)
-- 3. Query Corrigida e Realista
WITH MetricasPorImovel AS (
SELECT
h.proprietario_id,
h.hospedagem_id,
SUM(DATEDIFF(a.data_fim, a.data_inicio)) AS dias_ocupados,
-- Calcula o ciclo de vida individual do imóvel para evitar o "tempo fantasma"
DATEDIFF(MAX(a.data_fim), MIN(a.data_inicio)) AS dias_disponibilidade_real
FROM hospedagens h
JOIN alugueis a ON h.hospedagem_id = a.hospedagem_id
GROUP BY h.proprietario_id, h.hospedagem_id
)
SELECT
proprietario_id,
ROUND((SUM(dias_ocupados) / SUM(dias_disponibilidade_real)) * 100, 2) AS taxa_ocupacao_realista
FROM MetricasPorImovel
GROUP BY proprietario_id;