|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
Код: plsql 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. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98.
1. Есть таблица с оценками статей (0...255). Нужно оставить в таблице только те строки, где были изменения оценки score . Остальные строки удалить. Было так: Код: plaintext 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.
Нужно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
2. Я записываю текущие оценки в историю оценок text_score_history - следующим запросом: INSERT INTO text_score_history (text_id, score, dt) SELECT id, score, NOW() FROM texts (в таблице texts - около 400.000 записей) Можно ли как-то быстро добавлять только изменившиеся оценки, т.е. добавлять когда: text_score_history.score (для последней записи) <>texts.score ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 22:24 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
fiddle mynick Было так Вот какого [censored] это "было" (и соответственно последующее "нужно") не соответствует выложенному коду, а? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 23:05 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
mynick Можно ли как-то быстро добавлять только изменившиеся оценки, т.е. добавлять когда: text_score_history.score (для последней записи) <>texts.score ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2021, 23:07 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
Akina Огромное спасибо. Пример реально работает. На реальных данных (40 млн записей) - уже почти час выполняется запрос. Akina Вот какого [censored] это "было" (и соответственно последующее "нужно") не соответствует выложенному коду, а? Пытался показать пример (что примерно есть и что нужно) и урезать данные, чтобы не раздувать пост простым копированием. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 12:36 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
mynick На реальных данных (40 млн записей) - уже почти час выполняется запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 14:33 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
Akina, Т.к. выполнялось почти 3 часа, прибил процесс. И в надежде на увеличение скорости - добавил отдельные индексы для dt и score и запустил заново. Попробую запустить select. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 14:53 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
mynick, select по данным все еще выполняется (>15 минут). А если сделать это 5 частями и добавив к WHERE t3.id IS NULL and (t1.text_id<=100000), (t1.text_id>100000 and t1.text_id<=200000 и т.д.), будет заметно быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 15:09 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
с WHERE t3.id IS NULL and (t1.text_id<=10000) - выполняется 4 минуты. Единственное, заметил, что если одинаковые dt и score, пример: (11345906, 64, 150 , ' 2019-10-03 ') (11651367, 64, 150 , ' 2019-10-03 ') данные не удаляются. Я этот момент не учел в коде первого поста :( ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 15:23 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
В https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=54f088c2b84f564fd39cd28e820c67ed После: (11040882, 64, 150, '2019-09-29'), Добавил строку: (11040883, 64, 150, '2019-09-29'), Видно сейчас в результатах ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 15:42 |
|
Удалить дублирующиеся строки, по условию
|
|||
---|---|---|---|
#18+
Значит, надо сравнивать не dt, а соотв. id. Всего-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2021, 17:20 |
|
|
start [/forum/topic.php?fid=47&fpage=9&tid=1828107]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 194ms |
0 / 0 |