|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Всем привет, можно ли пару альтернатив к моему запросу? Имеется две таблицы total и korr. Причем, известно, что содержимое таблицы korr - это часть содержимого в total. Нужно найти к каждой строки korr (partition by part) предыдущую и последующую строку по datum из total. Select должен возвращать: 1. строку из korr 2. предыдущую стоку (к строке из korr) из total 3. Последующую стоку (к строке из korr) из total Вот данные вместе с решением: Код: 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.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 14:17 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, select * from ( select total.* ,lag(total.datum) over (partition by total.part order by total.datum) as prev_datum ,lead(total.datum) over (partition by total.part order by total.datum) as next_datum from total where 1=1 ) total left join korr on korr.part = total.part where 1=1 and (korr.datum = total.datum or korr.datum = total.prev_datum or korr.datum = total.next_datum) ; ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 14:48 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
chidoriami, спасибо. Оригинально. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:02 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, total.part,total.datum уникальные? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:04 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Stax, да ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:05 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, P.S. нужно, что бы запрос быстро работал. Oracle 12.1.0.2.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:06 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
chidoriami, Проблеиа в вашем решение в том, что из за 1 строки в korr вы должы всю таблицу total читать. Код: plsql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:17 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, индекс по total.part,total.datum есть? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:28 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Stax, конечно UNIQUE. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 15:31 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersenchidoriami, Проблеиа в вашем решение в том, что из за 1 строки в korr вы должы всю таблицу total читать. я так понимаю Вы хотите избежать полного чтения тотал не вариант решения так для попробовать, в надежде на STOPKEY Код: plsql 1. 2. 3.
..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 16:00 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Stax, А я полного чтения в моем решение избежал. Просто коду получилось многовато. А мне из этого решение нужно ODI-Mapping создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 16:16 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian AndersenStax, А я полного чтения в моем решение избежал. Просто коду получилось многовато. А мне из этого решение нужно ODI-Mapping создать. UNION - тяжелая операция я б заменил на UNION ALL (>= | <= на >|<) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 16:25 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersenполного чтения в моем решение избежалЕсли korr попадает в более определенного процента блоков total, последовательный фулскан может быть выгоднее поштучного заглядывания через индекс. Хотя к этому еще сортировка по полному объему. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 16:53 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
-2-, думаю, что селект по индексу будет на много быстрее. total 10 M строк korr 100 строк ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 19:08 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersenkorr 100 строкНу, тогда попробуй мой вариант, но с inner join только по part. count тогда поменять на условный. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 19:17 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
-2-, ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2019, 22:53 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, У Вас с двойкой несколько разные запросы сравните напр на Код: plsql 1. 2. 3. 4. 5. 6. 7.
зи с латералом бистродействие не сравнивали? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2019, 21:47 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Stax, Не пробовал. Очень уж он не решительно этот запрос описал. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 09:13 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, Sorry. Вернее вы. Сегодня попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2019, 09:53 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, на заветах -2- Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
зы важно что надо получить если 21799703 правильний то возможно достаточно count(decode(t.datum,k_datum,1)) over ... ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 10:00 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Stax, А чего не так? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 11:49 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
MaximaXXL, не знаю каков правильный ответ (как должен выглядеть результат) напр для Код: 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.
с учетом авторНужно найти к каждой строки korr (partition by part) предыдущую и последующую строку по datum из total. имхо должна быть строка с ид 1 и 4 более правильно Код: plsql 1. 2. 3. 4. 5. 6.
но с учетом "к каждой строки korr" тож терзают сомнения зы латерал какраз исчет для каждой строки в корр перыдущую и следующую но ето не вписывается в "альтернатива моему запросу", если считать что запрс правильный ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 12:15 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Stax, сорри. Была ошибка в моем решение. То, что ты предложил - правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 17:53 |
|
альтернатива моему запросу
|
|||
---|---|---|---|
#18+
Hans Christian Andersen, вот это должен выдать селект Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2019, 18:04 |
|
|
start [/forum/topic.php?fid=52&fpage=85&tid=1882835]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 188ms |
0 / 0 |