Один из способов сделать это - выбрать минимум Start Date
, который больше, чем Start Date
в текущей строке, в качестве End Date
, и если такой даты не существует, используйте вместо NOW()
:
SELECT *,
COALESCE((SELECT MIN(`Start Date`)
FROM data d2
WHERE d2.`Start Date` > d.`Start Date`),
NOW()) AS `End Date`
FROM data d
ORDER BY `Start Date`
Вывод:
Start Date User_id End Date
2019-12-11 09:26:00 user3 2019-12-29 08:43:00
2019-12-29 08:43:00 user2 2020-01-08 10:52:00
2020-01-08 10:52:00 user2 2020-02-10 10:20:00
2020-02-10 10:20:00 user1 2020-05-28 07:51:24
Демонстрация на dbfiddle
Примечание. Я предположил, что даты в вашей таблице на самом деле datetime
значения . Если это не так (почему бы и нет?), Вам нужно сначала преобразовать их, используя STR_TO_DATE
.