MySQL Duplicate Row и обновить как старые, так и новые строки

Мне нужно продублировать строку в SQL, обновить один столбец в старой строке и обновить один столбец в новой строке.

Использование MariaDB / MySQL

я быатрибутзначениеДата началаДата окончания
1attribute_x00ноль
2attribute_y10ноль

Я хочу:

  1. Получить все строки, где attribute = attribute_x
  2. Установите end_date этой строки на текущую отметку времени.
  3. Дублируйте эту строку.
  4. В новой строке установите start_date на текущую отметку времени.
  5. В новой строке установите для end_date значение null.

Что вы пробовали до сих пор?

Alex 30.03.2021 02:08

Был одним из тех, кто «не знал, с чего начать». Мой первоначальный подход заключался в том, чтобы получить список идентификаторов строк и выполнить запрос на обновление end_date для этих идентификаторов. Легко, но тогда я не знал, как легко дублировать эти строки, и если бы я знал, как получить идентификаторы новых строк

Josh Dredge 30.03.2021 02:12
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
2
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это две операции:

update t
    set end_date = now()
    where attribute = 'attribute_x';

insert into t (attribute, value, start_date, end_date)
    select attribute, value, now(), null
    from t
    where attribute = 'attribute_x';

Спасибо, меня немного смутил там оператор вставки, а именно select attribute, value, now(), null, но думаю, теперь я понял.

Josh Dredge 30.03.2021 03:22

Другие вопросы по теме