Гость
Форумы / [игнор отключен] [закрыт для гостей] / Количество последовательно повторяющихся элементов в столбце / 21 сообщений из 21, страница 1 из 1
27.05.2016, 10:09
    #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
27.05.2016, 10:12
    #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
27.05.2016, 10:18
    #39244601
Zerro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество последовательно повторяющихся элементов в столбце
а если нет нумератора то придумать его самому)
...
Рейтинг: 0 / 0
27.05.2016, 10:28
    #39244613
uwscsi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество последовательно повторяющихся элементов в столбце
Да, номера конечно есть, сквозная нумерация от и до.
Наверно не совсем корректно описал задачу.
Вот так, например:
1 1
2 1
3 2
4 2
5 1
6 1
7 1
8 1
9 2
...
Рейтинг: 0 / 0
27.05.2016, 10:40
    #39244630
uwscsi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество последовательно повторяющихся элементов в столбце
Если отбирать меньше номера строки и равно этому элементу, то он посчитает правильно только первую группу элементов)
Т.е.
1 - 1
2 - 1
3 - 2
4 - 2
5 - 1
6 - 1

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

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

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

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

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

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

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

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

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

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

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

СГРУППИРОВАТЬ ПО
Таб.Ч
ну да не получится.. можно сколько равных после текущего но не подряд
...
Рейтинг: 0 / 0
27.05.2016, 12:43
    #39244792
Zerro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество последовательно повторяющихся элементов в столбце
о.. только вес если сделать.. так же умножаем и ищем пока вес изменится (все кто ниже тебя .. потом перыфй с изменившемся весом -1
...
Рейтинг: 0 / 0
27.05.2016, 12:51
    #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
27.05.2016, 13:16
    #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
27.05.2016, 13:23
    #39244851
uwscsi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество последовательно повторяющихся элементов в столбце
javapecker,

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

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