powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Количество последовательно повторяющихся элементов в столбце
21 сообщений из 21, страница 1 из 1
Количество последовательно повторяющихся элементов в столбце
    #39244592
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 (...)..,)

Крутил и так и сяк соединениями, пробовал через смещение определять номер элемента, где происходит смена значения,
но как-то не особо успешно.

У кого-нибудь есть мысли по этому поводу?
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244594
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 (...)..,)

Крутил и так и сяк соединениями, пробовал через смещение определять номер элемента, где происходит смена значения,
но как-то не особо успешно.

У кого-нибудь есть мысли по этому поводу?
Это не из ТЧ? номер строки есть? а так отобрать все что меньше номер строки и рано значение и количество посчитать
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244601
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если нет нумератора то придумать его самому)
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244613
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, номера конечно есть, сквозная нумерация от и до.
Наверно не совсем корректно описал задачу.
Вот так, например:
1 1
2 1
3 2
4 2
5 1
6 1
7 1
8 1
9 2
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244630
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если отбирать меньше номера строки и равно этому элементу, то он посчитает правильно только первую группу элементов)
Т.е.
1 - 1
2 - 1
3 - 2
4 - 2
5 - 1
6 - 1

Он посчитает
1 - 2
2 - 2
1 - 4

Что не есть верно...
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244681
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uwscsi, для вас критично чтобы это выполнялось запросом или можно без него?
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244696
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,

Да, именно запросом и в этом как раз загвоздка.
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244697
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 1
2 1
3 2
4 2
5 1
6 1
7 1
8 1
9 2

1 запрос -пересечение само с собой - с условием все строки меньше или равно текущей
2 группировку по второму столбику -а по первому максимум
все... вроде..или тебе надо что б у каждого было сколько после него идет?
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244709
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Zerro,

Этот запрос вернёт изначальный столбец)
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244722
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uwscsiZerro,

Этот запрос вернёт изначальный столбец)
с чего вдруг
условие только потребуется на равенству значение левого
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244759
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такой запрос имеется в виду?

ВЫБРАТЬ
МАКСИМУМ(Таб.Н) КАК Н,
Таб.Ч КАК Ч

ИЗ
Таб КАК Таб
ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб1
ПО (Таб1.Н <= Таб.Н)

СГРУППИРОВАТЬ ПО
Таб.Ч
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244790
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uwscsiВот такой запрос имеется в виду?

ВЫБРАТЬ
МАКСИМУМ(Таб.Н) КАК Н,
Таб.Ч КАК Ч

ИЗ
Таб КАК Таб
ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб1
ПО (Таб1.Н <= Таб.Н)

СГРУППИРОВАТЬ ПО
Таб.Ч
ну да не получится.. можно сколько равных после текущего но не подряд
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244792
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о.. только вес если сделать.. так же умножаем и ищем пока вес изменится (все кто ниже тебя .. потом перыфй с изменившемся весом -1
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244803
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
ВЫБРАТЬ
	Таблица.Номер,
	Таблица.Значение
ПОМЕСТИТЬ вт
ИЗ
	РегистрСведений.Таблица КАК Таблица
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	т.Номер,
	МИНИМУМ(т1.Номер) КАК группа,
	т.Значение
ПОМЕСТИТЬ вт1
ИЗ
	вт КАК т
		ЛЕВОЕ СОЕДИНЕНИЕ вт КАК т1
		ПО (т1.Номер > т.Номер)
			И т.Значение <> т1.Значение

СГРУППИРОВАТЬ ПО
	т.Номер,
	т.Значение
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	МИНИМУМ(т.Номер) КАК НачальныйНомерСтрокиПоследовательности,
	т.Значение,
	КОЛИЧЕСТВО(т.Значение) КАК ЧислоПовторений
ИЗ
	вт1 КАК т

СГРУППИРОВАТЬ ПО
	т.группа,
	т.Значение

УПОРЯДОЧИТЬ ПО
	МИНИМУМ(т.Номер)
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244840
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,

Фух, я тоже сделал.
У меня получился вот такой "монстр":

ВЫБРАТЬ
Таб.Ч КАК Ч,
Таб.Н КАК Н
ПОМЕСТИТЬ Таб
ИЗ
&Таб КАК Таб
;
Выбрать * Из Таб;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Таб.Н КАК Н,
Таб.Ч КАК Ч,
Таб1.Ч КАК Ч1,
Таб1.Н КАК Н1,
ВЫБОР
КОГДА Таб.Н = 1
ТОГДА Таб.Н
КОГДА Таб.Н ЕСТЬ NULL
ТОГДА Таб1.Н + 1
КОГДА Таб.Ч <> Таб1.Ч
ТОГДА Таб.Н
КОНЕЦ КАК Изменение
ПОМЕСТИТЬ ТабИзм
ИЗ
Таб КАК Таб
ПОЛНОЕ СОЕДИНЕНИЕ Таб КАК Таб1
ПО (Таб.Н = Таб1.Н + 1)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТабИзм.Ч КАК Ч,
ТабИзм.Изменение КАК Изменение
ПОМЕСТИТЬ ТабИзмН
ИЗ
ТабИзм КАК ТабИзм
ГДЕ
НЕ ТабИзм.Изменение ЕСТЬ NULL
И НЕ ТабИзм.Н ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТабИзм.Изменение КАК Изменение
ПОМЕСТИТЬ ТабИзмК
ИЗ
ТабИзм КАК ТабИзм
ГДЕ
НЕ ТабИзм.Н1 ЕСТЬ NULL
И НЕ ТабИзм.Изменение ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ТабИзмН.Ч КАК Число,
ТабИзмН.Изменение КАК Изменение,
ТабИзмН.Н КАК НомерНач,
ТабИзмК.Н КАК НомерКон,
ТабИзмК.Изменение - ТабИзмН.Изменение КАК Повторений
ИЗ
(ВЫБРАТЬ
ТабИзмН.Ч КАК Ч,
ТабИзмН.Изменение КАК Изменение,
КОЛИЧЕСТВО(ТабИзмН1.Изменение) КАК Н
ИЗ
ТабИзмН КАК ТабИзмН
ЛЕВОЕ СОЕДИНЕНИЕ ТабИзмН КАК ТабИзмН1
ПО (ТабИзмН1.Изменение <= ТабИзмН.Изменение)

СГРУППИРОВАТЬ ПО
ТабИзмН.Ч,
ТабИзмН.Изменение) КАК ТабИзмН
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
ТабИзмК.Изменение КАК Изменение,
КОЛИЧЕСТВО(ТабИзмК1.Изменение) КАК Н
ИЗ
ТабИзмК КАК ТабИзмК
ЛЕВОЕ СОЕДИНЕНИЕ ТабИзмК КАК ТабИзмК1
ПО (ТабИзмК1.Изменение <= ТабИзмК.Изменение)

СГРУППИРОВАТЬ ПО
ТабИзмК.Изменение) КАК ТабИзмК
ПО (ТабИзмН.Н = ТабИзмК.Н)

----------

Сейчас попробую твоего
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244851
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,

Твой вариант даже шустрее работает:)
Благоводарю!
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244856
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uwscsi, принцип примерно одинаковый, зато с точки зрения запутывания вражеских шпионов твой вне конкуренции)
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244878
uwscsi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javapecker,

Разобрался в принципе работы твоего запроса - у тебя получилось пронумеровать группы последовательностей)
Я - не смог додуматься как сконструировать подобное)
Поэтому - ищу границы последовательностей,
дальше - перенумеровываю их и потом уже соединяю по номерам)
Это - определённо дольше чем у тебя)
Мозг!!!)
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244899
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛЕВОЕ СОЕДИНЕНИЕ вт КАК т1
ПО (т1.Номер > т.Номер)
И т.Значение <> т1.Значение
Отберутся все кто меньше текущего..но не подряд - имхо не верно
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244911
javapecker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zerro, там подряд не нужно, в этом запросе для каждой текущей строки находится первый следующий номер, в котором значение отличается от текущего. и по этому номеру последовательности потом группируются. То есть для таблицы
1 а
2 а
3 б
4 а
5 а
результат будет
1 а 3
2 а 3
3 б 4
4 а null
5 а null
мы таким образом идентифицировали каждую последовательность
...
Рейтинг: 0 / 0
Количество последовательно повторяющихся элементов в столбце
    #39244928
Zerro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javapeckerZerro, там подряд не нужно, в этом запросе для каждой текущей строки находится первый следующий номер, в котором значение отличается от текущего. и по этому номеру последовательности потом группируются. То есть для таблицы
1 а
2 а
3 б
4 а
5 а
результат будет
1 а 3
2 а 3
3 б 4
4 а null
5 а null
мы таким образом идентифицировали каждую последовательность
а туплю..точно
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Количество последовательно повторяющихся элементов в столбце
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]