#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, а не синтаксиса для добавления нового столбца в таблицу.