Задать вопрос
@j238267431

Как обновить таблицу на основании таблицы полученной с помощью рекурсии?

Добрый день

есть SQL код
WITH RECURSIVE updated_documents AS (
    SELECT 
        id, 
        dt,
        CASE 
            WHEN dt = (SELECT MAX(dt) FROM d_selling) THEN 1
            ELSE 0
        END AS new_id
    FROM 
        d_selling
    WHERE 
        dt = (SELECT MIN(dt) FROM d_selling)
    UNION ALL
    SELECT 
        d.id, 
        d.dt,
        CASE 
            WHEN d.dt = (SELECT MAX(dt) FROM d_selling WHERE id = ud.id) THEN ud.new_id + 1
            ELSE ud.new_id
        END
    FROM 
        d_selling d
    JOIN 
        updated_documents ud ON d.id = ud.id
)
select * from updated_documents;

подскажите пожалуйста, как можно изменить код так, чтобы вместо select * from updated_documents; был update
То есть нужно проставить id в таблице в порядке исходя из даты
  • Вопрос задан
  • 85 просмотров
Подписаться 2 Средний 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
rc-dm
@rc-dm
Full-Stack Web Developer
Если задача заключается в том, чтобы просто перенумеровать строки в порядке возрастания дат, то можно использовать оконные функции
WITH ordered_documents AS (
    SELECT 
        id, 
        dt,
        ROW_NUMBER() OVER (ORDER BY dt) AS new_id
    FROM 
        d_selling
)
UPDATE d_selling ds
SET id = od.new_id
FROM ordered_documents od
WHERE ds.id = od.id AND ds.dt = od.dt;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы