|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
Добрый день! Возникла вышеуказанная задача в рамках 1С. Есть колонка со следующими (например) значениями: 2,1,1,1,1,2,2,1,1,2,2,2,1 Впоследствии хочется получить количество идущих подряд элементов. То есть 2 - 1 1 - 4 2 - 2 1 - 2 2 - 3 1 - 1 Эта задача решена чистым скулём в темах: http://www.sql.ru/forum/538850/zapros-kolichestva-posledovatelnyh-povtoreniy и http://www.sql.ru/forum/528216/kak-poluchit-kolichestvo-yacheek-s-odinakovym-znacheniem-podryad Но в 1С нельзя использовать конструкции вида Select(a,b,c, Select (...)..,) Крутил и так и сяк соединениями, пробовал через смещение определять номер элемента, где происходит смена значения, но как-то не особо успешно. У кого-нибудь есть мысли по этому поводу? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 10:09 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
uwscsiДобрый день! Возникла вышеуказанная задача в рамках 1С. Есть колонка со следующими (например) значениями: 2,1,1,1,1,2,2,1,1,2,2,2,1 Впоследствии хочется получить количество идущих подряд элементов. То есть 2 - 1 1 - 4 2 - 2 1 - 2 2 - 3 1 - 1 Эта задача решена чистым скулём в темах: http://www.sql.ru/forum/538850/zapros-kolichestva-posledovatelnyh-povtoreniy и http://www.sql.ru/forum/528216/kak-poluchit-kolichestvo-yacheek-s-odinakovym-znacheniem-podryad Но в 1С нельзя использовать конструкции вида Select(a,b,c, Select (...)..,) Крутил и так и сяк соединениями, пробовал через смещение определять номер элемента, где происходит смена значения, но как-то не особо успешно. У кого-нибудь есть мысли по этому поводу? Это не из ТЧ? номер строки есть? а так отобрать все что меньше номер строки и рано значение и количество посчитать ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 10:12 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
а если нет нумератора то придумать его самому) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 10:18 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
Да, номера конечно есть, сквозная нумерация от и до. Наверно не совсем корректно описал задачу. Вот так, например: 1 1 2 1 3 2 4 2 5 1 6 1 7 1 8 1 9 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 10:28 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
Если отбирать меньше номера строки и равно этому элементу, то он посчитает правильно только первую группу элементов) Т.е. 1 - 1 2 - 1 3 - 2 4 - 2 5 - 1 6 - 1 Он посчитает 1 - 2 2 - 2 1 - 4 Что не есть верно... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 10:40 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
uwscsi, для вас критично чтобы это выполнялось запросом или можно без него? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 11:19 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
javapecker, Да, именно запросом и в этом как раз загвоздка. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 11:32 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
1 1 2 1 3 2 4 2 5 1 6 1 7 1 8 1 9 2 1 запрос -пересечение само с собой - с условием все строки меньше или равно текущей 2 группировку по второму столбику -а по первому максимум все... вроде..или тебе надо что б у каждого было сколько после него идет? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 11:32 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
Zerro, Этот запрос вернёт изначальный столбец) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 11:41 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
uwscsiZerro, Этот запрос вернёт изначальный столбец) с чего вдруг условие только потребуется на равенству значение левого ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 11:51 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
Вот такой запрос имеется в виду? ВЫБРАТЬ МАКСИМУМ(Таб.Н) КАК Н, Таб.Ч КАК Ч ИЗ Таб КАК Таб ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб1 ПО (Таб1.Н <= Таб.Н) СГРУППИРОВАТЬ ПО Таб.Ч ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 12:17 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
uwscsiВот такой запрос имеется в виду? ВЫБРАТЬ МАКСИМУМ(Таб.Н) КАК Н, Таб.Ч КАК Ч ИЗ Таб КАК Таб ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб1 ПО (Таб1.Н <= Таб.Н) СГРУППИРОВАТЬ ПО Таб.Ч ну да не получится.. можно сколько равных после текущего но не подряд ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 12:42 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
о.. только вес если сделать.. так же умножаем и ищем пока вес изменится (все кто ниже тебя .. потом перыфй с изменившемся весом -1 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 12:43 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
uwscsi, вот так должно работать. таблица из двух полей, номер и значение Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 12:51 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
javapecker, Фух, я тоже сделал. У меня получился вот такой "монстр": ВЫБРАТЬ Таб.Ч КАК Ч, Таб.Н КАК Н ПОМЕСТИТЬ Таб ИЗ &Таб КАК Таб ; Выбрать * Из Таб; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Таб.Н КАК Н, Таб.Ч КАК Ч, Таб1.Ч КАК Ч1, Таб1.Н КАК Н1, ВЫБОР КОГДА Таб.Н = 1 ТОГДА Таб.Н КОГДА Таб.Н ЕСТЬ NULL ТОГДА Таб1.Н + 1 КОГДА Таб.Ч <> Таб1.Ч ТОГДА Таб.Н КОНЕЦ КАК Изменение ПОМЕСТИТЬ ТабИзм ИЗ Таб КАК Таб ПОЛНОЕ СОЕДИНЕНИЕ Таб КАК Таб1 ПО (Таб.Н = Таб1.Н + 1) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТабИзм.Ч КАК Ч, ТабИзм.Изменение КАК Изменение ПОМЕСТИТЬ ТабИзмН ИЗ ТабИзм КАК ТабИзм ГДЕ НЕ ТабИзм.Изменение ЕСТЬ NULL И НЕ ТабИзм.Н ЕСТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТабИзм.Изменение КАК Изменение ПОМЕСТИТЬ ТабИзмК ИЗ ТабИзм КАК ТабИзм ГДЕ НЕ ТабИзм.Н1 ЕСТЬ NULL И НЕ ТабИзм.Изменение ЕСТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТабИзмН.Ч КАК Число, ТабИзмН.Изменение КАК Изменение, ТабИзмН.Н КАК НомерНач, ТабИзмК.Н КАК НомерКон, ТабИзмК.Изменение - ТабИзмН.Изменение КАК Повторений ИЗ (ВЫБРАТЬ ТабИзмН.Ч КАК Ч, ТабИзмН.Изменение КАК Изменение, КОЛИЧЕСТВО(ТабИзмН1.Изменение) КАК Н ИЗ ТабИзмН КАК ТабИзмН ЛЕВОЕ СОЕДИНЕНИЕ ТабИзмН КАК ТабИзмН1 ПО (ТабИзмН1.Изменение <= ТабИзмН.Изменение) СГРУППИРОВАТЬ ПО ТабИзмН.Ч, ТабИзмН.Изменение) КАК ТабИзмН ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ТабИзмК.Изменение КАК Изменение, КОЛИЧЕСТВО(ТабИзмК1.Изменение) КАК Н ИЗ ТабИзмК КАК ТабИзмК ЛЕВОЕ СОЕДИНЕНИЕ ТабИзмК КАК ТабИзмК1 ПО (ТабИзмК1.Изменение <= ТабИзмК.Изменение) СГРУППИРОВАТЬ ПО ТабИзмК.Изменение) КАК ТабИзмК ПО (ТабИзмН.Н = ТабИзмК.Н) ---------- Сейчас попробую твоего ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 13:16 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
javapecker, Твой вариант даже шустрее работает:) Благоводарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 13:23 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
uwscsi, принцип примерно одинаковый, зато с точки зрения запутывания вражеских шпионов твой вне конкуренции) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 13:25 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
javapecker, Разобрался в принципе работы твоего запроса - у тебя получилось пронумеровать группы последовательностей) Я - не смог додуматься как сконструировать подобное) Поэтому - ищу границы последовательностей, дальше - перенумеровываю их и потом уже соединяю по номерам) Это - определённо дольше чем у тебя) Мозг!!!) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 13:51 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
ЛЕВОЕ СОЕДИНЕНИЕ вт КАК т1 ПО (т1.Номер > т.Номер) И т.Значение <> т1.Значение Отберутся все кто меньше текущего..но не подряд - имхо не верно ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 14:11 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
Zerro, там подряд не нужно, в этом запросе для каждой текущей строки находится первый следующий номер, в котором значение отличается от текущего. и по этому номеру последовательности потом группируются. То есть для таблицы 1 а 2 а 3 б 4 а 5 а результат будет 1 а 3 2 а 3 3 б 4 4 а null 5 а null мы таким образом идентифицировали каждую последовательность ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 14:25 |
|
Количество последовательно повторяющихся элементов в столбце
|
|||
---|---|---|---|
#18+
javapeckerZerro, там подряд не нужно, в этом запросе для каждой текущей строки находится первый следующий номер, в котором значение отличается от текущего. и по этому номеру последовательности потом группируются. То есть для таблицы 1 а 2 а 3 б 4 а 5 а результат будет 1 а 3 2 а 3 3 б 4 4 а null 5 а null мы таким образом идентифицировали каждую последовательность а туплю..точно ... |
|||
:
Нравится:
Не нравится:
|
|||
27.05.2016, 14:37 |
|
|
start [/forum/topic.php?fid=28&msg=39244851&tid=1518747]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
156ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 290ms |
total: | 547ms |
0 / 0 |