Как получить последние данные в двойных данных и удалить другие с помощью запроса - PullRequest
0 голосов
/ 21 июня 2019

У меня есть данные в таблице А с двойным или более.И я хочу получить последний ввод данных и удалить старые данные.Как?

Я пытаюсь выбрать с помощью distinc и inner join, но при выполнении для удаления старые и последние данные включаются.поэтому у меня возникли некоторые проблемы.

Выберите * из A, где po in (выберите max (po) из B)

В результате неверные данные.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Если вы хотите удалить все, кроме максимального po (как подсказывает ваш код), то вы можете сделать:

delete from a
    where po < (select max(a2.po) from a a2);

Чаще всего вы хотите сохранить максимальное значение po на основе некоторого другого столбца. Для этого используйте коррелированный подзапрос:

delete from a
    where po < (select max(a2.po) from a a2 where a2.? = a.?);  -- ? is for the grouping column
0 голосов
/ 21 июня 2019

Сначала я создаю новый результат таблицы из distinc таблицы A.

create table c AS<br> select distinct po, plan_ref from A group by po, plan_ref

After that, copy the table A. Let say it begin table B.

delete all the data in table A.

`INSERT INTO A (id, po
, plan_ref
, cust_order
, cust_code
, cust_name
, destination
, art_no
, art_name
, cust_reqdate
, posdd
, podd
, ship_date
, container
, ship
, plant_cell
, cbm
, remark
, upload_by
, upload_date)
select MAX(a.id), MAX (a.po)
, MAX(a.plan_ref)
, MAX(a.cust_order)
, MAX(a.cust_code)
, MAX(a.cust_name)
, MAX(a.destination)
, MAX(a.art_no)
, MAX(a.art_name)
, MAX(a.cust_reqdate)
, MAX(a.posdd)
, MAX(a.podd)
, MAX(a.ship_date)
, MAX(a.container)
, MAX(a.ship)
, MAX(a.plant_cell)
, MAX(a.cbm)
, MAX(a.remark)
, MAX(a.upload_by)
, MAX(a.upload_date) from C b
inner join B a on a.plan_ref = b.plan_ref
AND a.po = b.po GROUP BY a.po`
...