Estou tentando combinar duas crosstab no postgres, mas travou, será ótimo se alguém me orientar.
-- rainfall CROSS TAB
SELECT * FROM
CROSSTAB(
'SELECT block_id, forecast_date, rainfall_mm
FROM weather.imd_forecast
ORDER BY 1'
)
AS rainfall_crosstab(
block_id int, rainfall_day_1 numeric, rainfall_day_2 numeric,
rainfall_day_3 numeric, rainfall_day_4 numeric, rainfall_day_5 numeric
);
-- temp_max CROSS TAB
SELECT * FROM
CROSSTAB(
'SELECT block_id, forecast_date, temp_max_deg_c
FROM weather.imd_forecast
ORDER BY 1'
)
AS temp_max_crosstab(
block_id int, temp_max_day_1 numeric, temp_max_day_2 numeric,
temp_max_day_3 numeric, temp_max_day_4 numeric, temp_max_day_5 numeric);
Supondo que block_id e Forecast_date sejam campos comuns em ambos os resultados da tabela cruzada, você pode usar uma
join
operação para combiná-los com base nesses campos. Com base nessa suposição, primeiro, podemos usar expressões de tabela comuns (CTEs) para criar conjuntos de resultados temporários para rain_crosstab e temp_max_crosstab. Em seguida, realizamos uma operação JOIN nos camposblock_id
eforecast_date
para combinar os dois resultados da tabela cruzada.Ambas as suas consultas exigem
ORDER BY 1, 2
, não apenasORDER BY 1
. Caso contrário, o resultado pode estar errado. Veja a demonstração no violino.Solução combinada:
violino
Leia aqui: