Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбиение строк на группы по условию / 6 сообщений из 6, страница 1 из 1
11.04.2020, 00:32
    #39946098
fireprophet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение строк на группы по условию
Здравствуйте! У меня таблица есть таблица цен, строки ранжированы по возрастанию цены, мне необходимо разбить ее на группы строк (пометить каким-то образом) по следующему условию. Сравниваем строку с минимальной ценой (первая строка) со строкой с второй по возрастанию цены, вычисляем разницу между ними (например 10 процентов), затем первую с третьей, первую с четвертой, и.т.д. как только разница составляет 30 процентов мы все строки до этой (назовем ее n) помечаем как отдельную подгруппу. Далее повторяем также операции для строки n (то есть сравниваем с n+1, n+2,n+3, итд), пока не доберёмся до той где разница будем 30 процентов. Так до конца таблицы. Как сравнить, пометить строки где превышение 30 процентов понимаю (использую lag), но как итеративно идти от одной такой строки до другой без использования курсоров (чего очень не хочется) не понимаю. Ntile требуемым функционалом также не обладает. Ребята, пожалуйста, подскажите.
...
Рейтинг: 0 / 0
11.04.2020, 09:06
    #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
13.04.2020, 10:10
    #39946509
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение строк на группы по условию
fireprophet,

объясните, что вы делаете на самом деле ABC анализ или что-то такое?
...
Рейтинг: 0 / 0
13.04.2020, 22:21
    #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
13.04.2020, 22:21
    #39946783
fireprophet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение строк на группы по условию
a_voronin,Суть-кластеризация, но вот такая интересная)
...
Рейтинг: 0 / 0
13.04.2020, 22:23
    #39946785
fireprophet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение строк на группы по условию
Сделал с помощью цикла while)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбиение строк на группы по условию / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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