|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
Еще тут вопрос вохник: Есть таблица, надо сделать выборку без дубликатов, если повторяется - брать только ту запись, у которой значение [created] - самое свежее. Ключ: name, size, cat Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Мой вариант: Код: sql 1. 2. 3. 4. 5. 6.
Какие еще возможны запросы? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:00 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
Ролг Хупин, можно изменить систему хранения, исторические данных держать отдельно или использовать темпоральные таблицы. В этом случае сортировка не потребуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:06 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
Ролг Хупин, Код: sql 1. 2. 3. 4.
мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:10 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
felix_ff Ролг Хупин, Код: sql 1. 2. 3. 4.
мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане. А в моем варианте тоже сортировака есть или там CTE дает выигрыш? Я еще один вариант сделал: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:28 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
Ролг Хупин, есть но только одна, из-за row_number() over ( order by ) в моем же случае помимо сортировки внутри окна, должна быть сортировка по row_number() desc сортировки вашего кода можно избежать если будет индекс Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:32 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
felix_ff Ролг Хупин, есть но только одна, из-за row_number() over ( order by ) в моем же случае помимо сортировки внутри окна, должна быть сортировка по row_number() desc сортировки вашего кода можно избежать если будет индекс Код: sql 1. 2. 3. 4. 5. 6. 7.
Индекса нет, ну, вот нет . Кстати, если здесь нужна сортировка по имени: Код: sql 1. 2. 3. 4.
тогда нужно еще один запрос накрутить типа такого? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:39 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
Ролг Хупин тогда нужно еще один запрос накрутить типа такого? Код: sql 1. 2. 3. 4. 5. 6.
да. ваш изначальный запрос вполне оптимальный для данной постановки задачи, чем он вас не устраивает? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:43 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
felix_ff Ролг Хупин тогда нужно еще один запрос накрутить типа такого? Код: sql 1. 2. 3. 4. 5. 6.
да. ваш изначальный запрос вполне оптимальный для данной постановки задачи, чем он вас не устраивает? Извечная тяга к прекрасному Просто, хотел понять, какие варианты есть. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 14:13 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
felix_ff Ролг Хупин, Код: sql 1. 2. 3. 4.
мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане. К сожалению, он может быть СИЛЬНО хуже по производительности, если таким образом оформляется подзапрос, с результатами которого потом связываются какие-нибудь внешние таблицы и т.д. Оптимизатор оценивает количество возвращаемых записей из такого подзапроса =1, и соответственно, внешние таблицы связывает с ним через NL. Вариант, когда N=row_number() over (partition by [name], [size], [cat] order by [created] desc) рассчитывается явно, и во Where явно фигурирует N=1 - таким недостатком не обладает, и соединение производится правильно, в зависимости от количества записей в выборке подзапроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 16:36 |
|
Как бурать дубликаты?
|
|||
---|---|---|---|
#18+
uaggster felix_ff Ролг Хупин, Код: sql 1. 2. 3. 4.
мой вариант лаконичнее в плане кода, но должен быть несколько медленней в плане производительности из-за еще одного оператора сортировки в плане. К сожалению, он может быть СИЛЬНО хуже по производительности, если таким образом оформляется подзапрос, с результатами которого потом связываются какие-нибудь внешние таблицы и т.д. Оптимизатор оценивает количество возвращаемых записей из такого подзапроса =1, и соответственно, внешние таблицы связывает с ним через NL. Вариант, когда N=row_number() over (partition by [name], [size], [cat] order by [created] desc) рассчитывается явно, и во Where явно фигурирует N=1 - таким недостатком не обладает, и соединение производится правильно, в зависимости от количества записей в выборке подзапроса. когда несете чушь, несите осторожней что бы не расплескать, потому что ценна только полная чушь. другое дело что и оценка кол-ва строк тянется не с top, а с предыдущих операторов. Код: 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. 28. 29.
Код: xml 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. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203.
сиквел достаточно умный, он не обрубает estimated rows от инструкции top(1) with ties, потому что для оператора top with ties является специальным параметром (смотрите ниже по плану) проблема не в конструкции запроса, а в использовании табличной переменной p.s. как в теге src xml выделять только часть текста? он жрет >>> <<< нормально только когда тэг src, а когда xml представление выделяет всю строку. приходится писать >>>> <<<< но тогда в отображении появляется ненужные экранирующие символы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 17:23 |
|
|
Start [/forum/topic.php?fid=46&fpage=2&tid=1683825]: |
0ms |
get settings: |
81ms |
get forum list: |
16ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
126ms |
get topic data: |
26ms |
get forum data: |
4ms |
get page messages: |
495ms |
get tp. blocked users: |
2ms |
others: | 194ms |
total: | 956ms |
0 / 0 |