MySQL получить дату окончания из двух последовательных строк, которые имеют только дату начала - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть таблица, подобная приведенной ниже:

enter image description here

Я пробовал это, но это не работает:

SELECT A.id, cast(A.startdate as date) as from_date, cast(B.startdate as date)
AS enddate
 FROM three A INNER JOIN three B ON B.id = (A.id)
ORDER BY A.id,cast(A.startdate as date) ASC

Мой желаемый результат должен быть:

enter image description here

1 Ответ

0 голосов
/ 23 февраля 2020

Я думаю, что это то, что вы хотите:

SELECT
    t.Id,
    t.old_value,
    t.new_value,
    t.StartDate,
    -- if it's the latest entry of distinct old_value new_value pairs
    IF(t1.Id IS NULL, t2.StartDate - INTERVAL 1 DAY, t.StartDate) AS EndDate
FROM three t
LEFT JOIN three t1 ON t.old_value = t1.old_value AND t.new_value = t1.new_value
    AND t.StartDate > t1.StartDate
LEFT JOIN three t2 ON t.new_value = t2.old_value
;

Трудно сказать, без шоу создает и пригодные образцы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...