|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
Приветствую, такой экспресс-вопрос, как после группировки записей удалить(изменить) все записи в каждой группе, кроме первой(для простоты возьмём условие - кроме записи с наименьшим ид в группе). Скажем есть запрос: Код: sql 1. 2. 3. 4.
В целом задача состоит в получении дублей записей справочника и их удалении. В данном случае я с помощью группировки получил все дубли, теперь я знаю сколько их, а как теперь из каждой такой группы удалить(или например изменить) все записи кроме, скажем, первой. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 11:12 |
|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
На вскидку, использовать оконную функцию rank(). А потом удалить записи у которых rank > 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 11:20 |
|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
Guzya На вскидку, использовать оконную функцию rank(). А потом удалить записи у которых rank > 1 Спасибо, правда rank не подошёл, тут лучше подошло row_number(). В этом случае он нумерует строки в группах и становится возможным обработать их по своему условию. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Здесь теперь можно удалить все строки, где row_number > 1. Удивило, что нельзя использовать rn в условии в том же запросе, нужно делать внешний над этой выборкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 12:56 |
|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
I dont know Приветствую, такой экспресс-вопрос, как после группировки записей удалить(изменить) все записи в каждой группе, кроме первой(для простоты возьмём условие - кроме записи с наименьшим ид в группе). Скажем есть запрос: Код: sql 1. 2. 3. 4.
В целом задача состоит в получении дублей записей справочника и их удалении. В данном случае я с помощью группировки получил все дубли, теперь я знаю сколько их, а как теперь из каждой такой группы удалить(или например изменить) все записи кроме, скажем, первой. Ну например (проверить предварительно): Код: sql 1. 2. 3. 4. 5. 6.
-- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 12:59 |
|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
Maxim Boguk, Точно, можно же ещё одну агрегирующую ф-ию использовать, не подумал сразу, спасибо за идею ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.09.2021, 13:29 |
|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
I dont know, При удалении можно ещё ориентироваться на тех. столбец ctid при необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 07:33 |
|
Экспресс-вопрос: как удалить все записи кроме одной в каждой группе после группировки
|
|||
---|---|---|---|
#18+
Совсем необязательно использовать группировку Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Если для каких-то колонок допустим Null, то для них в условия сравнения надо ещё coalesce добавить ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2021, 16:13 |
|
|
start [/forum/topic.php?fid=53&msg=40094353&tid=1993878]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 390ms |
0 / 0 |