|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Добрый день, подскажите пожалуйста. Есть таблица: CREATE TABLE car_generation( id INT(8) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE, id_car_model INT(8) NOT NULL REFERENCES car_model(id), id_car_serie INT(8) NOT NULL REFERENCES car_serie(id), year_begin YEAR NOT NULL, year_end YEAR NOT NULL ); Таблица заполнена с помощью фейкера. В ней year begin и year end приведены в порядок, так что year begin < year end. Но нужно добавить логику годам, обновить их. Так, что в одной модели - генерации авто выпускались одна за одной. Я попытался это сделать(принял, что одна генерация выпускается 3 года). Подскажите пожалуйста, что надо исправить, или вообще подход неправильный? См. код: CREATE PROCEDURE update_years() BEGIN UPDATE car_generation SET year_begin OVER(ORDER BY id_car_model, name) = LEAD(year_end) OVER(ORDER BY id_car_model, name), year_end OVER(ORDER BY id_car_model, name) = year_begin OVER(ORDER BY id_car_model, name) + 3 FROM car_generation WHERE id_car_model OVER(ORDER BY id_car_model, name) = LAG(id_car_model) OVER(ORDER BY id_car_model, name); END// ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 14:10 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Дайте INSERT INTO примера исходных данных и покажите конечный результат для этих данных, с пояснением, почему так. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:06 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Mellok14 что надо исправить ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:07 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Mellok14, вот из этой таблички и обновляйтесь Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Но лучше, тестовые данные и по-больше информации о ключах, сортировке и т.д и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:25 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Akina, INSERT INTO `car_generation` VALUES ('1','1 генерация','5','4','1983','2017'), ('2','3 генерация','1','8','1971','2015'), ('3','2 генерация','1','5','1998','2014'), ('4','1 генерация','1','7','1978','1982'), ('5','4 генерация','1','3','1978','2011'), ('6','2 герерация','5','2','1999','2002'), ('7','3 генерация','5','6','1983','1999'), Хочу получить (если в отсортированнном виде по name и car_model и измененными годами): ('4','1 генерация','1','7','1978','1982'), ('3','2 генерация','1','5','1982','1985'), ('2','3 генерация','1','8','1985','1988'), ('5','4 генерация','1','3','1988','1991'), ('1','1 генерация','5','4','1983','2017'), ('6','2 герерация','5','2','2017','2019'), ('7','3 генерация','5','6','2019','2022'), ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:34 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
entrypoint Mellok14, вот из этой таблички и обновляйтесь Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Но лучше, тестовые данные и по-больше информации о ключах, сортировке и т.д и т.п. Подскажите смысл этого представления: SELECT 1 AS id, 1 AS name, 1 AS id_car_model, 1 AS id_car_serie, 2017 AS year_begin, 2018 AS year_end…… А если там тысячи строк? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:38 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Akina Mellok14 что надо исправить Про update понял. Если найдется время, не могли бы подправить запрос, я что-то запутался. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:43 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Mellok14, entrypoint Подскажите смысл этого представления: SELECT 1 AS id, 1 AS name, 1 AS id_car_model, 1 AS id_car_serie, 2017 AS year_begin, 2018 AS year_end…… А если там тысячи строк? это те тестовые данные, которые вы не представили, желая получить решение а вот это Код: plsql 1. 2.
ответ на вопрос Mellok14Как взять информацию с предыдущей строки ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:49 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Mellok14 Я вижу Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:51 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Akina Mellok14 Я вижу Код: sql 1.
Да, слишком много ошибок. Надо дорабатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:58 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Mellok14 ('6','2 герерация','5','2','2017','2019'), ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:59 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
entrypoint Mellok14, entrypoint Подскажите смысл этого представления: SELECT 1 AS id, 1 AS name, 1 AS id_car_model, 1 AS id_car_serie, 2017 AS year_begin, 2018 AS year_end…… А если там тысячи строк? это те тестовые данные, которые вы не представили, желая получить решение а вот это Код: plsql 1. 2.
ответ на вопрос Mellok14Как взять информацию с предыдущей строки Спасибо, а уже потом делаем UPDATE из этой таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:59 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Akina Mellok14 ('6','2 герерация','5','2','2017','2019'), Опечатался, этот пример написан вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:00 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Mellok14, Да, а из этой таблицы обновляемся, главное правильно определить поля, которые входят в PARTITION BY и ORDER BY ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:03 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:12 |
|
Как взять информацию с предыдущей строки и обновить текущую?
|
|||
---|---|---|---|
#18+
Akina Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
fiddle Не знаю, откуда у вас столько альтруизма, но спасибо вам огромное! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:23 |
|
|
start [/forum/topic.php?fid=47&msg=39928049&tid=1828740]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
74ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 183ms |
0 / 0 |