https://www.youtube.com/watch?v=w67I_aPKygE&list=PLavw5C92dz9Hxz0YhttDniNgKejQlPoAn&index=3
DROP TABLE IF EXISTS FOOTER;
CREATE TABLE FOOTER
(
id INT PRIMARY KEY,
car VARCHAR(20),
length INT,
width INT,
height INT
);
INSERT INTO FOOTER VALUES (1, 'Hyundai Tucson', 15, 6, NULL);
INSERT INTO FOOTER VALUES (2, NULL, NULL, NULL, 20);
INSERT INTO FOOTER VALUES (3, NULL, 12, 8, 15);
INSERT INTO FOOTER VALUES (4, 'Toyota Rav4', NULL, 15, NULL);
INSERT INTO FOOTER VALUES (5, 'Kia Sportage', NULL, NULL, 18);
SELECT * FROM FOOTER;
-- Approach 1
SELECT * FROM
(SELECT
car
FROM footer
WHERE car IS NOT NULL
ORDER BY id DESC
LIMIT 1) c
CROSS JOIN
(SELECT
length
FROM footer
WHERE length IS NOT NULL
ORDER BY id DESC
LIMIT 1
) l
CROSS JOIN
(
SELECT
width
FROM footer
WHERE width IS NOT NULL
ORDER BY id DESC
LIMIT 1
) w
CROSS JOIN
(
SELECT
height
FROM footer
WHERE car IS NOT NULL
ORDER BY id DESC
LIMIT 1
) h
-- Approach 2
WITH CTE AS (
SELECT *,
SUM(CASE WHEN car IS NOT NULL THEN 1 ELSE 0 END) OVER(order by id) AS seq_car,
SUM(CASE WHEN length IS NOT NULL THEN 1 ELSE 0 END) OVER(order by id) AS seq_len,
SUM(CASE WHEN width IS NOT NULL THEN 1 ELSE 0 END) OVER(order by id) AS seq_wid,
SUM(CASE WHEN height IS NOT NULL THEN 1 ELSE 0 END) OVER(order by id) AS seq_hig
FROM footer
)
SELECT
FIRST_VALUE(car) OVER (PARTITION BY seq_car ORDER BY id) AS car,
FIRST_VALUE(length) OVER (PARTITION BY seq_len ORDER BY id) AS Lenth,
FIRST_VALUE(width) OVER (PARTITION BY seq_wid ORDER BY id) AS Width,
FIRST_VALUE(height) OVER (PARTITION BY seq_hig ORDER BY id) AS Height
FROM CTE
ORDER BY id DESC
LIMIT 1;