Reputation: 477
I have a partitioned table by a date, in the field LOAD_DATE. I need to extract the last 6 partitions for the first day of each month.
i.e.
2022-01-01
2021-12-01
2021-11-01
2021-10-01
2021-09-01
2021-08-01
So far, I have something like this, which is pretty ugly, because I have to copy-paste a line to allow more months:
SELECT *
FROM partitionedTable
where FECHA_CARGA IN (
Select
DATE_TRUNC(CURRENT_DATE, MONTH)
UNION ALL
Select
DATE_TRUNC(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), MONTH)
UNION ALL
Select
DATE_TRUNC(DATE_SUB(CURRENT_DATE, INTERVAL 2 MONTH), MONTH),
UNION ALL
Select
DATE_TRUNC(DATE_SUB(CURRENT_DATE, INTERVAL 3 MONTH), MONTH),
UNION ALL
Select
DATE_TRUNC(DATE_SUB(CURRENT_DATE, INTERVAL 4 MONTH), MONTH),
UNION ALL
Select
DATE_TRUNC(DATE_SUB(CURRENT_DATE, INTERVAL 5 MONTH), MONTH)
)
How can I improve this code?
Upvotes: 1
Views: 1638
Reputation: 3034
You should be able to change your where clause to
fecha_carga in UNNEST(generate_date_array( date_trunc(date_sub(current_date(), INTERVAL 5 MONTH), MONTH), current_date() , INTERVAL 1 MONTH))
Upvotes: 1