Как взять дату из предыдущего ряда - PullRequest
0 голосов
/ 28 мая 2020

Я хотел бы создать новый столбец с именем «End Date» и поместить туда значение из следующей строки, но если начальная дата является самой новой, поместите туда текущую дату.

Моя версия MySQL db not Поддержка функций LAG и LEAD.

Текущее состояние:

Start Date            User_id  
11/12/2019 9:26:00    user3    
29/12/2019 8:43:00    user2   
08/01/2020 10:52:00   user2    
10/02/2020 10:20:00   user1    

Чего я хочу достичь:

Start Date            User_id  End Date
11/12/2019 9:26:00    user3    29/12/2019 8:43:00
29/12/2019 8:43:00    user2    08/01/2020 10:52:00
08/01/2020 10:52:00   user2    10/02/2020 10:20:00 
10/02/2020 10:20:00   user1    28/05/2020 10:10:00 

1 Ответ

1 голос
/ 28 мая 2020

Один из способов сделать это - выбрать минимум 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.

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