Create a Simple Calendar or Date Dimension On-the-fly
I have a report where I want the user to pick from 3 options for the date range on the report:
- Latest business date; generally this would be yesterday
- Week-to-date
- Month-to-date
WITH CTE_DATES (DATE_FILTER, CALENDAR_KEY)
AS
(
-- BUSINESS_DATE
SELECT
'BUSINESS-DATE' AS DATE_FILTER
, CALENDAR_KEY
FROM CALENDAR
WHERE FULL_DATE = CURRENT_DATE - 1
UNION ALL
-- CURRENT WEEK thru BUSINESS_DATE
SELECT
'WEEK-TO-DATE'
, CALENDAR_KEY
FROM CALENDAR
WHERE DATE_PART(WEEK, FULL_DATE) = DATE_PART(WEEK, CURRENT_DATE - 1)
AND YEAR(FULL_DATE) = DATE_PART(YEAR, CURRENT_DATE - 1)
AND FULL_DATE <= CURRENT_DATE - 1
UNION ALL
-- CURRENT MONTH thru BUSINESS DATE
SELECT
'MONTH-TO-DATE'
, CALENDAR_KEY
FROM CALENDAR
WHERE FULL_DATE BETWEEN
DATE_FROM_PARTS(
DATE_PART(YEAR, CURRENT_DATE - 1)
, DATE_PART(MONTH, CURRENT_DATE - 1)
, 1
)
AND CURRENT_DATE - 1
)
/*
SELECT *
FROM CTE_DATES
ORDER BY CALENDAR_KEY
SELECT
DATE_FILTER
, COUNT(*) AS NUMBER_OF_DAYS
, MIN(CALENDAR_KEY) AS MIN_CALENDAR_KEY
, MAX(CALENDAR_KEY) AS MAX_CALENDAR_KEY
FROM CTE_DATES
GROUP BY DATE_FILTER
*/
Comments
Post a Comment