Две строки в двух столбцах

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть таблица:

Владелец Книга Дата
Джон Мерзкие тела Эвелин Во 2009-05-20
Том Мерзкие тела Эвелин Во 2009-05-22
Джим Моав — мой умывальник, Стивен Фрай 2009-05-26
Кейт Моав — мой умывальник, Стивен Фрай 2009-06-02

Как я могу получить таблицу:

Владелец Книга Pick_Date Gave_Back_Book_Date
Джон Мерзкие тела Эвелин Во 2009-05-20 2009-05-22
Том Мерзкие тела Эвелин Во 2009-05-22
Джим Моав — мой умывальник, Стивен Фрай 2009-05-26 2009-06-02
Кейт Моав — мой умывальник, Стивен Фрай 2009-06-02

Комментарии:

1. Я не понимаю, вы просто берете первую следующую дату для любой книги в качестве даты возврата предыдущего владельца?

2. ДА. Это была ошибка во второй таблице. Я отредактировал его.

Ответ №1:

Кажется, вы ищете lead() функцию window, которая позволяет вам получать доступ к столбцам из «следующей» строки (строк)

 select owner, book, "date" as pick_date, 
       lead(date) over (partition by book order by "date") as return_date
from the_table
order by book, "date"
 

Говорить о «следующей» строке имеет смысл только в том случае, если строки отсортированы, поэтому order by "date" в определении окна необходим

Ответ №2:

Вы должны изменить таблицу с помощью

 ALTER TABLE table_name
ADD column_name datatype;
 

для добавления столбца или

 ALTER TABLE table_name
MODIFY column_name datatype;
 

для его изменения.
Затем вам нужно изменить каждую строку таблицы, которая уже есть в ней.

Комментарии:

1. Спасибо за ваш ответ. Основная проблема в том, что я хочу получить вторую таблицу с запросом.

2. Как написано в настоящее время, он не отвечает на вопрос. OP запрашивал решение, основанное на логике, выраженной с использованием SQL, а не синтаксиса для добавления нового столбца в таблицу.