powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбиение строк на группы по условию
6 сообщений из 6, страница 1 из 1
Разбиение строк на группы по условию
    #39946098
fireprophet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! У меня таблица есть таблица цен, строки ранжированы по возрастанию цены, мне необходимо разбить ее на группы строк (пометить каким-то образом) по следующему условию. Сравниваем строку с минимальной ценой (первая строка) со строкой с второй по возрастанию цены, вычисляем разницу между ними (например 10 процентов), затем первую с третьей, первую с четвертой, и.т.д. как только разница составляет 30 процентов мы все строки до этой (назовем ее n) помечаем как отдельную подгруппу. Далее повторяем также операции для строки n (то есть сравниваем с n+1, n+2,n+3, итд), пока не доберёмся до той где разница будем 30 процентов. Так до конца таблицы. Как сравнить, пометить строки где превышение 30 процентов понимаю (использую lag), но как итеративно идти от одной такой строки до другой без использования курсоров (чего очень не хочется) не понимаю. Ntile требуемым функционалом также не обладает. Ребята, пожалуйста, подскажите.
...
Рейтинг: 0 / 0
Разбиение строк на группы по условию
    #39946120
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare @t table (p money);

insert into @t
 (p)
 select top (100)
  row_number() over (order by (select 1)) + 99
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

select
 p, cast(p * 100 / min(p) over (order by p) - 100 as int) / 30 as g30
from
 @t
order by
 p;
...
Рейтинг: 0 / 0
Разбиение строк на группы по условию
    #39946509
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fireprophet,

объясните, что вы делаете на самом деле ABC анализ или что-то такое?
...
Рейтинг: 0 / 0
Разбиение строк на группы по условию
    #39946782
fireprophet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
DROP table IF EXISTS #list_of_subgroup_name
SELECT DISTINCT subgroup_name
INTO #list_of_subgroup_name
FROM table

SET @max_number_of_subgroup = (SELECT
max(right(subgroup_name, len(subgroup_name) - (patindex('%подгруппа%',subgroup_name)+8))) AS [number_of_subgroup] FROM #list_of_subgroup_name)



SET @text_of_subgroup = (SELECT distinct left(subgroup_name, patindex('%подгруппа%',subgroup_name)+8)
FROM #list_of_subgroup_name WHERE subgroup_name = @subgroup_name_ctr)

SET @lowest = (select min(cost) from table WHERE subgroup_name = @subgroup_name_ctr)
set @delimiter = @lowest


WHILE (SELECT count(cost) FROM table WHERE cost > @lowest AND subgroup_name = @subgroup_name_ctr) > 0
begin


update table
set new_subgroup_name = concat(@text_of_subgroup, @max_number_of_subgroup+1)
where unit_cost_within_part >= @previous_lowest AND unit_cost_within_part < @lowest AND subgroup_name = @subgroup_name_ctr

set @delimiter = @lowest*1.15

SET @max_number_of_subgroup = @max_number_of_subgroup+1

SET @previous_lowest = @lowest

set @lowest = (select min(cost)
from table
where @delimiter <= cost AND subgroup_name = @subgroup_name_ctr)
end
...
Рейтинг: 0 / 0
Разбиение строк на группы по условию
    #39946783
fireprophet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a_voronin,Суть-кластеризация, но вот такая интересная)
...
Рейтинг: 0 / 0
Разбиение строк на группы по условию
    #39946785
fireprophet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал с помощью цикла while)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбиение строк на группы по условию
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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