Since your most recent questions were related to MySQL, I assume that you want to use the MySQL solution.
, MAX CASE. , ( , , ). :
SELECT Id,
MAX(CASE WHEN row_number = 1 THEN date_from END) date_from1,
MAX(CASE WHEN row_number = 1 THEN date_to END) date_to1,
MAX(CASE WHEN row_number = 2 THEN date_from END) date_from2,
MAX(CASE WHEN row_number = 2 THEN date_to END) date_to2,
MAX(CASE WHEN row_number = 3 THEN date_from END) date_from3,
MAX(CASE WHEN row_number = 3 THEN date_to END) date_to3
FROM (
SELECT
id,
@running:=if(@previous=id,@running,0) + 1 as row_number,
@previous:=id,
date_from, date_to
FROM YourView
JOIN (SELECT @previous := 0) r
ORDER BY id, date_from, date_to
) t
GROUP BY Id
, SQL. SQL.
, row_number , :
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN row_number = ',
row_number,
' THEN date_from END) date_from',
row_number)
),
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(CASE WHEN row_number = ',
row_number,
' THEN date_to END) date_to',
row_number)
) INTO @sql
FROM YourView;
SET @sql = CONCAT('SELECT ID, ',
@sql, '
FROM YourView
GROUP BY ID');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
.