This is a gaps and islands problem. We can use the difference in row numbers method here combined with string aggregation:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY Date) rn1,
ROW_NUMBER() OVER (PARTITION BY Type ORDER BY Date) rn2
FROM yourTable
),
cte2 AS (
SELECT *, rn1-rn2 AS grp, DENSE_RANK() OVER (PARTITION BY Type ORDER BY rn1-rn2) rnk
FROM cte
ORDER BY grp, rnk
)
SELECT
GROUP_CONCAT(CASE WHEN Type = 'Incoming' THEN TEXT END, ' ') AS Incoming,
GROUP_CONCAT(CASE WHEN Type = 'Outgoing' THEN TEXT END, ' ') AS Outgoing
FROM cte2
GROUP BY
rnk
ORDER BY
rnk;
Demo
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…