Using CTE.
CURRENT_DATE
example:
CREATE TABLE public.slide_test (
id integer,
slides integer,
order_date date
);
INSERT INTO
slide_test
VALUES
(1,2,'2022-11-07'), (2,3,'2022-11-08'),(3,1,'2022-11-09'),
(4,5,'2022-11-10'), (5,3,'2022-11-11'),(6,8, '2022-11-14'),
(7,7, '2022-11-15');
select * from slide_test ;
id | slides | order_date
----+--------+------------
1 | 2 | 11/07/2022
2 | 3 | 11/08/2022
3 | 1 | 11/09/2022
4 | 5 | 11/10/2022
5 | 3 | 11/11/2022
6 | 8 | 11/14/2022
7 | 7 | 11/15/2022
SELECT CURRENT_DATE;
current_date
--------------
11/07/2022
WITH not_fri AS (
SELECT
CASE WHEN order_date - '1 day'::interval = CURRENT_DATE AND
extract(dow from CURRENT_DATE) != 5 THEN
sum(nullif (slides, 0))
END AS "1 Day",
CASE WHEN order_date - '2 day'::interval = CURRENT_DATE AND
extract(dow from CURRENT_DATE) != 5 THEN
sum(nullif (slides, 0))
END AS "2 Day"
FROM
slide_test
GROUP BY
order_date
),
fri AS (
SELECT
CASE WHEN order_date - '3 day'::interval = CURRENT_DATE AND
extract(dow from CURRENT_DATE) = 5 THEN
sum(nullif (slides, 0))
END AS "1 Day",
CASE WHEN order_date - '4 day'::interval = CURRENT_DATE AND
extract(dow from CURRENT_DATE) = 5 THEN
sum(nullif (slides, 0))
END AS "2 Day"
FROM
slide_test
GROUP BY
order_date
)
SELECT
*
FROM
not_fri
UNION
SELECT
*
FROM
fri;
1 Day | 2 Day
-------+-------
NULL | NULL
NULL | 1
3 | NULL
Using a Friday date:
WITH not_fri AS (
SELECT
CASE WHEN order_date - '1 day'::interval = '11/11/2022'::date AND
extract(dow from '11/11/2022'::date) != 5 THEN
sum(nullif (slides, 0))
END AS "1 Day",
CASE WHEN order_date - '2 day'::interval = '11/11/2022'::date AND
extract(dow from '11/11/2022'::date) != 5 THEN
sum(nullif (slides, 0))
END AS "2 Day"
FROM
slide_test
GROUP BY
order_date
),
fri AS (
SELECT
CASE WHEN order_date - '3 day'::interval = '11/11/2022'::date AND
extract(dow from '11/11/2022'::date) = 5 THEN
sum(nullif (slides, 0))
END AS "1 Day",
CASE WHEN order_date - '4 day'::interval = '11/11/2022'::date AND
extract(dow from '11/11/2022'::date) = 5 THEN
sum(nullif (slides, 0))
END AS "2 Day"
FROM
slide_test
GROUP BY
order_date
)
SELECT
*
FROM
not_fri
UNION
SELECT
*
FROM
fri;
1 Day | 2 Day
-------+-------
NULL | NULL
8 | NULL
NULL | 7