Skip to content

Instantly share code, notes, and snippets.

@nejdetckenobi
Created December 13, 2021 16:05
Show Gist options
  • Save nejdetckenobi/941f66575b1bc16af0b40be746b18664 to your computer and use it in GitHub Desktop.
Save nejdetckenobi/941f66575b1bc16af0b40be746b18664 to your computer and use it in GitHub Desktop.
CREATE TABLE calls (
customer_id INTEGER,
called_at TIMESTAMP,
SUCCESS_RESULT VARCHAR(2) NULL,
ERROR_RESULT INTEGER NULL
);
INSERT INTO calls VALUES (1, '2021-01-01', null, 3);
INSERT INTO calls VALUES (1, '2021-01-02', 'E', null);
INSERT INTO calls VALUES (1, '2021-01-03', null, 2);
INSERT INTO calls VALUES (1, '2021-01-04', 'S', null);
INSERT INTO calls VALUES (2, '2021-01-05', null, 8);
INSERT INTO calls VALUES (2, '2021-01-06', 'X', null);
INSERT INTO calls VALUES (2, '2021-01-07', null, 7);
INSERT INTO calls VALUES (2, '2021-01-08', 'Y', null);
INSERT INTO calls VALUES (1, '2021-01-09', null, 10);
INSERT INTO calls VALUES (3, '2021-01-03', 'Z', null);
INSERT INTO calls VALUES (4, '2021-01-01', null, 3);
WITH CTE
AS
(
SELECT
customer_id,
called_at,
CASE
WHEN success_result ISNULL THEN error_result::CHAR
WHEN error_result ISNULL THEN success_result
END AS result,
call_num
FROM
(
SELECT
*, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY called_at DESC) as call_num
FROM
calls
) callresults
WHERE call_num <= 2
)
SELECT
customer_id, "1", "2", "3"
FROM (
SELECT customer_id, result,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY call_num desc) AS rn
FROM CTE
) eml
PIVOT (
min(result)
FOR rn IN ([1],[2],[3])
) P
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment