|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Здравствуйте! Помогите пожалуйста с решением нетривиальной пока что для меня такой задачи. Есть таблица вида ID Family Name1ПоповИван2СидоровЮрий3СидоровЮрий4ПетровВасилий5ИвановСергей6ИвановСергей7ПоповЮрий Нужно удалить строки, где фамилия и имя совпадают с предыдущей строкой, чтобы таблица стала такой: ID Family Name1ПоповИван4ПетровВасилий7ПоповЮрий Записей примерно 50 тысяч, я думаю без оператора While не обойтись. Заранее благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 10:42 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200, Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 10:50 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Спасибо огромное, но забыл добавить, что версия базы данных довольно древняя - Microsoft SQL 2008 R2. Инструкция OVER() поддерживается насколько я понимаю от SQL 2012 Можно ли выполнить эту задачу без OVER ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 11:06 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 Инструкция OVER() поддерживается насколько я понимаю от SQL 2012 genri200 Можно ли выполнить эту задачу без OVER нуу, как-то жили люди и до исторического материализма OVER :) ... не очень, конечно, но для 50к записей должно быть "нестрашно" Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 11:16 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 11:20 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
court, Akina - спасибо! Akina, не совсем понятно из вашего примера, откуда берется таблица t :( Это дубль mytable ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 12:03 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 Akina, не совсем понятно из вашего примера, откуда берется таблица t :( Это дубль mytable ? Алиасы позволяют более кратко обзывать таблицы, и использовать в запросе одну таблицу несколько раз. Я бы и первое упоминание таблицы сделал алиасом. Для понятности: Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 13:10 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
alexeyvg, Спасибо, уже разобрался. Один нюанс остается, если будет таблица вида ID Family Name1ПоповИван2СидоровЮрий3СидоровЮрий4ПетровВасилий5ИвановСергей6ИвановСергей7ПоповЮрий8ИвановСергей То вышеуказанный код как я понимаю удалит всех Ивановых, но 8 строку надо оставить, так как в предыдущей (седьмой) строке не Иванов, а Попов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 13:34 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 То вышеуказанный код как я понимаю удалит всех Ивановых, но 8 строку надо оставить, так как в предыдущей (седьмой) строке не Иванов, а Попов. проверил бы, уже ... Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 13:40 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 13:44 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 вышеуказанный код как я понимаю удалит всех Ивановых genri200 8 строку надо оставить, так как в предыдущей (седьмой) строке не Иванов, а Попов. Код: sql 1.
на Код: sql 1.
Если же в значении id имеются "дырки" - пронумеруйте записи без дыр в CTE, a потом удаляйте. Или в подзапросе сделайте ещё один коррелированный NOT EXISTS. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 14:08 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 15:54 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Благодарю, пока вариант court и invm сработал корректнее, другой вариант оставляет одну запись из дублей. court, такой вопрос, что нужно добавить в ваш код, чтобы дополнительно проверить еще на одно условие при удалении, например в таблице ID Family Name Cond1ПоповИван12СидоровЮрий03СидоровЮрий04ПетровВасилий15ИвановСергей16ИвановСергей17ПоповЮрий0 удалить строки там, где Cond=1 и не трогать, где Cond=0. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 16:30 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 удалить строки там, где Cond=1 и не трогать, где Cond=0. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 16:56 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Спасибо всем, в итоге лучше всего подошел код от court с дополнением условия: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 18:37 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
Вдогонку еще один вопрос по удалению, есть две таблицы: ID Family Name1ПоповИван3СидоровЮрий4ПетровВасилий6ИвановСергей7ПоповЮрий и ID Family Name2СидоровЮрий4ПетровВасилий5ИвановСергей6ИвановСергей Нужно удалить строки в обеих таблицах, если хотя бы в одной из таблиц нет ID, которое есть в другой, то есть на выходе должны получиться такие таблицы ID Family Name4ПетровВасилий6ИвановСергей и ID Family Name4ПетровВасилий6ИвановСергей ID 4 и 6 присутствуют в обеих таблицах, эти строки не трогаем, остальные удаляем. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2019, 20:13 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 Нужно удалить строки в обеих таблицах, если хотя бы в одной из таблиц нет ID, которое есть в другой надо ж так сформулировать, что надо оставить только те записи, которые присутствуют в обоих таблицах. От таких формулировок и запросы соответствующие получаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 07:48 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 совпадают с предыдущей строкой На будущее. В РСУБД нет такого понятия как предыдущая или следующая строка. Порядок, как правило, нигде не гарантируется. Даже в случае с id надо всё обеспечивать руками, чтобы такая логика не поломалась после очередной "заливки". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 08:10 |
|
Удаление строки по результатам сравнения с предыдущей.
|
|||
---|---|---|---|
#18+
genri200 ID 4 и 6 присутствуют в обеих таблицах, эти строки не трогаем, остальные удаляем. Код: sql 1. 2. 3.
и второй запрос точно такой же с заменой t1 на t2 и наоборот ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 11:26 |
|
|
start [/forum/topic.php?fid=46&fpage=77&tid=1686807]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 385ms |
total: | 513ms |
0 / 0 |