|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемые товарищи. Помогите пожалуйста составить запрос для выборки периодов из ряда номеров для заданного условия. Есть таблица Код: sql 1. 2. 3. 4. 5. 6. 7.
Заполненная для примера следующими значениями: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Делаем выборку периодов ряда номеров со статусом равным 1 В результате выполнения составляемого запроса, должна появится выборка Код: plaintext 1. 2. 3.
Ребята, подскажите пожалуйста, в каком направлении искать решение этой задачи, а в идеале хотел бы увидеть рабочий запрос. P.S. задачу нужно решить только средствами SQL без использования языков программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 20:55 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
1) Укажите версию MySQL. 2) При наличии индекса (`series`,`number`) индекс (`series`) не имеет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 21:01 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Akina, В качестве испытательного стенда использую MariaDB (Server version: 10.1.38-MariaDB-0+deb9u1 Debian 9.8) но имею желание получить наиболее универсальное решение для MySQL. автор2) При наличии индекса (`series`,`number`) индекс (`series`) не имеет смысла. Да вы правы, в контексте этой задачи индекс по столбцу series не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.05.2019, 22:53 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEW, "монотонность и непрерывность" значений поля number в пределах одного и того же значения поля series - гарантируется? или гарантируется только монотонность, но не гарантируется непрерывность? В целом, напрашивается попытка реализовать метод "инварианта групп": искать заницу между сквозным нумератором записей в размере series и series+status... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 06:36 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Щукина АннаАндрейNEW, "монотонность и непрерывность" значений поля number в пределах одного и того же значения поля series - гарантируется? или гарантируется только монотонность, но не гарантируется непрерывность? В целом, напрашивается попытка реализовать метод "инварианта групп": искать заницу разницу между сквозным нумератором записей в размере series и series+status... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 06:37 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEWв контексте этой задачи индекс по столбцу series не нуженОн ВООБЩЕ не нужен. Индекс по выражению может использоваться как полностью, так и префиксно. АндрейNEWимею желание получить наиболее универсальное решение для MySQL. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
fiddle Для 5 версии наиболее разумным будет решение с использованием переменных. Но лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 07:51 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Щукина АннаАндрейNEW, "монотонность и непрерывность" значений поля number в пределах одного и того же значения поля series - гарантируется? или гарантируется только монотонность, но не гарантируется непрерывность? В целом, напрашивается попытка реализовать метод "инварианта групп": искать разницу между сквозным нумератором записей в размере series и series+status... Здравствуйте Анна. Непрерывность не гарантируется, но исходя из составного индекса по серии и номеру гарантируется уникальность каждого номера в своей серии. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 10:22 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Akina, Благодарю за помощь, Ваш запрос хорош, но есть один момент. в случае если запись со статусом 1 единична, то она не попадает в выборку, а должна попадать. При исходных данных в таблице Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Получаем результат: Код: plaintext 1. 2. 3.
а должен быть: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 10:30 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEWв случае если запись со статусом 1 единична, то она не попадает в выборку, а должна попадать. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
fiddle Правда, мне кажется, что если рисовать заново, получится лучше и оптимальнее - но ле-е-ень, проще оказалось доработать. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 11:26 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Akina, спасибо за тестовые данные.... :) ;) АндрейNEW, Пример на на "инварианте групп": Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 19:54 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEW, ещё как вариант - метод начала групп: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
fiddle ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 20:03 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEW, можно без всяких чудес и новомодных фич реализовать решение, но, думаю, оно вас не порадует своей гирлядностью и ресурсоемкостью... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 20:19 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Щукина Анна, Akina Благодарю за помощь. Увидел как велик пробел в моих знаниях sql. Буду разбираться как работают написанные вами запросы, а параллельно придется изучить новые для меня области знаний в SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.05.2019, 23:43 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Еще раз благодарю за помощь в решении задачи. Я изучил предложенные Вами варианты решения данной задачи. К сожалению в MariaDB версии 10.1 отсутствую оконные функции, табличные выражения и рекурсии. На свое машине проапгрейдить базу данных проблем нет, а вот на целевой машине, это сделать не возможно. Возможно ли без использования этих функций решить данную задачу? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.05.2019, 23:27 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEWВозможно ли без использования этих функций решить данную задачу? Чуть выше ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2019, 04:45 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
АндрейNEW, как подсказка... Возьмите за основу способ на " инварианте групп ", но сделайте в нем нумерацию с использованием переменных , а не через row_number. Должно будет получиться вполне себе приемлемое решение... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.05.2019, 05:15 |
|
Выборка граничных значений из числового ряда по условию
|
|||
---|---|---|---|
#18+
Щукина Анна, Благодарю Вас за желание помочь. По вашему совету доработал запрос на инварианте груп с использованием переменных, но видно я не до конца понял алгоритм решения этой задачи. В итоге застпорился на таком варианте запроса но он к сожалению не работает. Прошу подправить меня, в нужном направлении еще раз. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
в результате запроса получаю ошибку: "Subquery returns more than 1 row". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2019, 18:30 |
|
|
start [/forum/topic.php?fid=47&fpage=35&tid=1829111]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 152ms |
0 / 0 |