Как я могу использовать функцию Max для фильтрации списка и вставки в - PullRequest
0 голосов
/ 12 ноября 2019

Есть ли способ сделать что-то вроде:

Insert Into (col1, col2, col3)
Select col1, col2, col3, max(col4)
From mytable
Group By col1, col2, col3

Это дает мне: The select list for the INSERT statement contains more items than the insert list.

Я хочу использовать функцию max для фильтрации дубликатов, но когда я выбираю этодополнительное поле, порядок полей и количество полей не совпадают. Как я могу отфильтровать список из таблицы, использовать функцию max и вставить все записи, кроме записей в поле max?

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Вы описываете что-то вроде этого:

Insert Into (col1, col2, col3)
    select col1, col2, col3
    from mytable
    where t.col4 = (select max(t2.col4)
                    from mytable t2
                    where t2.col1 = t.col1 and t2.col2 = t.col2 and t2.col3 = t.col3
                   );

Однако это в значительной степени эквивалентно select distinct (значения NULL могут трактоваться по-разному). Вы, вероятно, хотите, чтобы дупсоны определялись только в одном столбце, поэтому я думаю:

insert into (col1, col2, col3)
    select col1, col2, col3
    from mytable
    where t.col4 = (select max(t2.col4)
                    from mytable t2
                    where t2.col1 = t.col1
                   );
1 голос
/ 12 ноября 2019

Я хочу использовать функцию max для фильтрации дубликатов

Что ж, я подозреваю, что вы действительно хотите distinct:

insert into my_target_table(col1, col2, col3)
select distinct col1, col2, col3 from my_source_table

Это вставитодна запись в целевой таблице для каждого отдельного (col1, col2, col3) кортежа в исходной таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...