| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Нужна подсказка |
| Автор: Zzz 29.10.2020, 15:40 | ||
| Добрый день, уважаемые форумчане! Помогите составить запрос. Есть таблица Table1 (пример) Номер Фамилия Имя Отчество Дата 1 Иванов Иван Иванович 01.01.2000 1 Иванов Иван Иванович 02.01.2000 1 Акимов Иван Иванович 04.01.2000 2 Петров Петр Петрович 04.01.2000 2 Петров Петр Петрович 07.01.2000 3 Сидоров Сидор Сидорович 08.01.2000 В итоге нужно получить таблицу вида: Номер Фамилия Имя Отчество Начало Конец 1 Иванов Иван Иванович 01.01.2020 03.01.2000 1 Акимов Иван Иванович 04.01.2020 - 2 Петров Петр Петрович 04.01.2020 - 3 Сидоров Сидор Сидорович 08.01.2020 - Объяснение: Поля Фамилия Имя Отчество могут меняться при одинаковом поле Номер. В итоговую таблицу в поле "Начало" должна попадать минимальная дата, в поле "Конец" - взять дату из строки изменения поля и вычесть 1 день. Если изменения полей не было - проставить null. Набросок запроса:
Понимаю, что скорее всего нужно использовать lead(), но сообразить не могу. Синтаксис Oracle. |
| Автор: Akina 30.10.2020, 09:05 | ||
Вот как это выглядит в MySQL:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=693c6693af0bdb9fffec2db13db168c9 В Оракле будет всё то же самое, возможно, кроме "минус 1 день". Ну и не забыть квотирование кириллических имён полей и алиасов. Исходные данные я немного расширил для проверки возможных вариаций. |