Попробуйте - по крайней мере, если в вашей базе данных есть функция, подобная LISTAGG, как в Vertica ...
WITH
-- this is your input - next time put it in so it can be
-- copy-pasted and formatted to the below ....
input(agent_id,travel_dest,cust_id,bookdt) AS (
SELECT 'A1001','Singapore','C1001',DATE '2109-06-10'
UNION ALL SELECT 'A1001','Singapore','C1001',DATE '2019-06-11'
UNION ALL SELECT 'A1001','Austin' ,'C1001',DATE '2019-06-19'
UNION ALL SELECT 'A1001','Austin' ,'C1001',DATE '2019-06-19'
UNION ALL SELECT 'A1001','Austin' ,'C1001',DATE '2019-06-20'
UNION ALL SELECT 'A1001','Singapore','C1001',DATE '2019-07-30'
UNION ALL SELECT 'A1001','Singapore','C1001',DATE '2019-07-31'
UNION ALL SELECT 'A1001','Delhi' ,'C1001',DATE '2019-08-01'
UNION ALL SELECT 'A1001','Delhi' ,'C1001',DATE '2019-08-10'
UNION ALL SELECT 'A1001','Delhi' ,'C1001',DATE '2019-08-10'
UNION ALL SELECT 'A1001','Delhi' ,'C1001',DATE '2019-08-10'
UNION ALL SELECT 'A1001','Delhi' ,'C1001',DATE '2019-08-10'
UNION ALL SELECT 'A1001','Delhi' ,'C1001',DATE '2019-08-25'
)
-- real WITH clause starts here - substitute comma below with "WITH" ...
,
with_prev AS (
SELECT
agent_id
, travel_dest
, LAG(travel_dest,1,'') OVER (PARTITION BY agent_id ORDER BY bookdt) AS prev_dest
FROM input
)
,
de_duped AS (
SELECT
agent_id
, travel_dest
FROM with_prev
WHERE travel_dest <> prev_dest
)
SELECT
agent_id
, LISTAGG(travel_dest) AS travel_dest
FROM de_duped
GROUP BY 1
;
Вы получите:
agent_id | travel_dest
----------+--------------------------------------------
A1001 | Singapore,Austin,Singapore,Delhi,Singapore