|
|
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
Добрый день, подскажите пожалуйста есть таблица например со значениями строк 1,2,3,4,5,6,7,8,9 и два параметра в запрос хочу передать, ограничивающие выборку сверху и снизу, к примеру 2 и 4 в этом случае нужно чтобы этот селект вывел значения 2,3,4 как это написать, сходу не сообразил. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 15:11 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 15:12 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
Да, верно если это как в моем примере числа А если есть таблица, на лету отсортированная ORDER BY 3, 2 колонкам 10, A, 1 13, B, 1 21, B, 1 14, C, 2 66, D, 2 55, D, 3 24, F, 3 11, E, 3 в параметры передается 2 значения первой колонки, к примеру 21 и 55 и в результате должен получить все значения этого диапазона Как это красиво сделать? between не подходит вроде Замудрил я, наверное всё просто) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 15:40 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
В общем из таблицы на лету отсортированной мне нужно выбрать все записи, начиная со стартовой (отсечь верхушку) 21, B, 1 14, C, 2 66, D, 2 55, D, 3 24, F, 3 11, E, 3 MINUS все значения после 55 24, F, 3 11, E, 3 и будет нужный массив. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 15:51 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leprechaunВ общем из таблицы на лету отсортированной мне нужно выбрать все записи, начиная со стартовой (отсечь верхушку) 21, B, 1 14, C, 2 66, D, 2 55, D, 3 24, F, 3 11, E, 3 MINUS все значения после 55 24, F, 3 11, E, 3 и будет нужный массив. щитаю, что без критерия сортировки - никак. буду рад ошибиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 15:57 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leggleprechaun... щитаю, что без критерия сортировки - никак. буду рад ошибиться. а если как отсортирован массив понятно - то во вложенном запросе высчитать номер строки с значением 55 и в итоговом вывести строки с номерами строк меньше или равной высчитанной. ну или можно с lead-lag поизвращаться. м.б. что ловчее есть. в голову не приходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:03 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
хорошая мысль, только если я беру select rownum from tab1 order by 1,5 то в номере строки каша, он вычисляется до сортировки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:08 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leggleggпропущено... щитаю, что без критерия сортировки - никак. буду рад ошибиться. а если как отсортирован массив понятно - то во вложенном запросе высчитать номер строки с значением 55 и в итоговом вывести строки с номерами строк меньше или равной высчитанной. ну или можно с lead-lag поизвращаться. м.б. что ловчее есть. в голову не приходит. row_number () over (order by) надо пользовать. только у меня есть опасение что можно проще. как - не соображу чей-та ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:14 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leprechaun, F после E. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Livesql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:14 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
SeaGate, я даж слов таких не знаю %) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:16 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leprechaunВ общем из таблицы на лету отсортированной мне нужно выбрать все записи, начиная со стартовой (отсечь верхушку) 21, B, 1 14, C, 2 66, D, 2 55, D, 3 24, F, 3 11, E, 3 MINUS все значения после 55 24, F, 3 11, E, 3 и будет нужный массив. как то не могу одновременно понять начиная со стартовой и отсечь верхушку отсечь верхунку Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. начиная с вехушки Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:24 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
stax.., а так? tt as (select t.*, sum(decode(a, 55, 1, 0)) over(order by c desc, b desc) o1, sum(decode(a, 14, 1, 0)) over(order by c, b) o2 from t) select a, b, c, o1, o2 from tt where o1=1 and o2 = 1 order by 3, 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:31 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
arlxstax.., а так? tt as (select t.*, sum(decode(a, 55, 1, 0)) over(order by c desc, b desc) o1, sum(decode(a, 14, 1, 0)) over(order by c, b) o2 from t) select a, b, c, o1, o2 from tt where o1=1 and o2 = 1 order by 3, 2 ето не ко мне, а к eprechaun откуда 14? eprechaun надо данные с 14 по 55? ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:37 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
stax.., для примера, развил идею ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:42 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leprechaunи будет нужный массив. У тебя "таблица, на лету отсортированная ORDER BY 3, 2 колонкам" а диапазон по колонке 1. Так-что верхняя грaница 55 может быть раньше нижней 21. Что тогда? И что если верхняя/нижняя грaница встречается несколько раз? И что если верхняя/нижняя грaница нe встречается? Сортировка по 3,2 неднозначна. У тебя две стоки с одинаковыми 3,2: 13, B, 1 21, B, 1 посeму неoпределено идeт ли 13 первым или 21. Судя по посту 13 первый, так-то предположу сортировку по 3,2,1. А в остальном: Код: 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. SY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:45 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
arlxstax.., а так? tt as (select t.*, sum(decode(a, 55, 1, 0)) over(order by c desc, b desc) o1, sum(decode(a, 14, 1, 0)) over(order by c, b) o2 from t) select a, b, c, o1, o2 from tt where o1=1 and o2 = 1 order by 3, 2 о вчитался я б так делал минусы много сортировок можно через lag/lead но вырастает вложенность в 12-ке возможно и через match_recognize ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:50 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
SYleprechaunи будет нужный массив. У тебя "таблица, на лету отсортированная ORDER BY 3, 2 колонкам" а диапазон по колонке 1. Так-что верхняя грaница 55 может быть раньше нижней 21. Что тогда? И что если верхняя/нижняя грaница встречается несколько раз? И что если верхняя/нижняя грaница нe встречается? Сортировка по 3,2 неднозначна. У тебя две стоки с одинаковыми 3,2: 13, B, 1 21, B, 1 посeму неoпределено идeт ли 13 первым или 21. Судя по посту 13 первый, так-то предположу сортировку по 3,2,1. А в остальном: Код: 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. SY я об +case col1 when 55 then 1 else 0 end не догадался ...... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 16:55 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
stax..в 12-ке возможно и через match_recognize Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:01 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
SY, SY Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Это на случай, когда 55 строго есть, как я вижу. Имеется определенная магия исходных данных в предоставленном ответе. Просто мой исходный корректно отработает, когда нет 55, или 2х21/1х55 и т.д., но он деревянный, конечно, до красивого с аналитикой не сообразил. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:42 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
Ого набросали вариантов, спасибо друзья, пока вчитываюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 17:52 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
Я вообще не знаю этих выражений, надо почитать, но код select col1, col2, col3 from tbl match_recognize( order by col3,col2,col1 all rows per match pattern(up+) define up as first(up.col1) = 21 and prev(up.col1) != 55) прекрасно справляется с моей задачей, огромное спасибо! И всем участникам обсуждения также. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 18:02 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
еще осталось сообразить как туда также красиво nvl вставить up as first(up.col1) = 21 and prev(up.col1) != 55) если 21 и 55 вообще не переданы, чтобы всё вывело ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 18:30 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
SeaGateИмеется определенная магия исходных данных в предоставленном ответе. Я ведь все эти вопросы задавaл: SYУ тебя "таблица, на лету отсортированная ORDER BY 3, 2 колонкам" а диапазон по колонке 1. Так-что верхняя грaница 55 может быть раньше нижней 21. Что тогда? И что если верхняя/нижняя грaница встречается несколько раз? И что если верхняя/нижняя грaница нe встречается? Сортировка по 3,2 неднозначна. У тебя две стоки с одинаковыми 3,2: 13, B, 1 21, B, 1 посeму неoпределено идeт ли 13 первым или 21. Судя по посту 13 первый, так-то предположу сортировку по 3,2,1. А в остальном... SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 19:15 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
leprechaunеще осталось сообразить как туда также красиво nvl вставить Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: 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. 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. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2016, 20:27 |
|
||
|
Выбор промежуточных значений запросом
|
|||
|---|---|---|---|
|
#18+
Уважаемый SY, можете еще немного пояснить. Вот реальный запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Там где нужно снизу отрезать, всё работает, если P_ORG_FROM IS NULL, то 0 дает весь список до конца. А вот там где нужно сверху отрезать, если я передаю первое по порядку значение, то выдается пустой список. Если передаю второе, то выводится начиная с него. Я не сильно понял конструкцию со временной таблицей, пришлось фигню временно написать с str_number = 2, так что первое не работает. Может видя этот запрос еще раз посоветуете как переписать срез сверху с NVL, пробовал читать синтиксис о паттернах, но сходу не въехал. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.12.2016, 11:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39368846&tid=1886777]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 276ms |
| total: | 573ms |

| 0 / 0 |
