powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как удалить все повторы подряд из последовательности AAABBBABAAA?
12 сообщений из 12, страница 1 из 1
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845353
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
ломаю голову над вопросом.
ID value1 A2 A3 B4 B5 A...44 200 100 600 A44 200 100 601 A44 200 100 602 B
Необходимо получить таблицу, у которой останутся только те строки, у которых предыдущее значение отличается от текущего.
Можно в лоб сделать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
  select T1.ID, T1.value
  from 
      T T1 
           inner join 
      T T2 
           on 
      T1.ID=T2.ID+1 and T1.value!=T2.value


Выбрасываем все индексы, с ними всё ясно. Индексы не используются (т.к., напр., первичный ключ там совсем другой)

Поэтому объединение, по сути, двух здоровых таблиц будет очень не эффективным.
Как решить подобную задачу, используя оконные функции, чтобы она работала быстрее? Чтобы по таблице был всего 1 проход, а не перемножение 44 млрд на 44 млрд.
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845361
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LAG, LEAD
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845368
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LAG, LEAD
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845370
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845371
londinium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
WITH CTE AS
(
  SELECT 1 AS ID,'A'AS VAL  
    UNION ALL
  SELECT 2 AS ID,'B'AS VAL  
    UNION ALL
  SELECT 3 AS ID,'C'AS VAL  
    UNION ALL
  SELECT 4 AS ID,'D'AS VAL  
    UNION ALL
  SELECT 5 AS ID,'D'AS VAL  
    UNION ALL
  SELECT 6 AS ID,'X'AS VAL  
)
SELECT C.ID,C.VAL,
LAG(C.VAL)OVER(ORDER BY ID ASC) XCOL
FROM CTE C;
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845953
AlexKM2020
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select s.*
from(
       select ROW_NUMBER() over(partition by [value] order by id) as cnt
       from [source].ProductNames
      )s
where s.cnt = 1;


delete s
from(
       select ROW_NUMBER() over(partition by [value] order by id) as cnt
       from [source].ProductNames
       )s
where s.cnt != 1;
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39845958
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexKM2020
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select s.*
from(
       select ROW_NUMBER() over(partition by [value] order by id) as cnt
       from [source].ProductNames
      )s
where s.cnt = 1;


delete s
from(
       select ROW_NUMBER() over(partition by [value] order by id) as cnt
       from [source].ProductNames
       )s
where s.cnt != 1;


Слушайте, вы хоть сами проверяйте, прежде чем такие советы давать.
Этот скрипт оставит только первое значение для каждого value. А не первое после изменения значения, как требуется автору.
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39846055
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хорошо я согласенНеобходимо получить таблицу, у которой останутся только те строки, у которых предыдущее значение отличается от текущего."Получить таблицу" я лично воспринимаю как "привести исходную таблицу к указанному виду" - т.е. удалить всё, что не соответствует условию. Но дальше Вы показываее получение не таблицы, а выборки...

Кстати, получение выборки (вряд ли компактной) из 44 млрд. записей мне кажется занятием из категории "странное"...
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39847430
хорошо я согласен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaхорошо я согласенНеобходимо получить таблицу, у которой останутся только те строки, у которых предыдущее значение отличается от текущего."Получить таблицу" я лично воспринимаю как "привести исходную таблицу к указанному виду" - т.е. удалить всё, что не соответствует условию. Но дальше Вы показываее получение не таблицы, а выборки...

Кстати, получение выборки (вряд ли компактной) из 44 млрд. записей мне кажется занятием из категории "странное"...
да, выборка

44 млрд - это из головы просто взято. Ну, 44 млн. Это необходимо для создания измерения для куба.
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39847433
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо ж тебе живётся... с 44 млрд. записями в голове
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39847437
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что? Если в базу инсёртить каждый стриженный волос во всех парикмахерских мира... Да за 10 лет...
Но надо ли?
...
Рейтинг: 0 / 0
как удалить все повторы подряд из последовательности AAABBBABAAA?
    #39847440
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaХорошо ж тебе живётся... с 44 млрд. записями в голове
Там намного больше!
Это только взято 44 млрд.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как удалить все повторы подряд из последовательности AAABBBABAAA?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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