Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / как удалить все повторы подряд из последовательности AAABBBABAAA? / 12 сообщений из 12, страница 1 из 1
05.08.2019, 12:53
    #39845353
хорошо я согласен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
Добрый день!
ломаю голову над вопросом.
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
05.08.2019, 13:03
    #39845361
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
LAG, LEAD
...
Рейтинг: 0 / 0
05.08.2019, 13:09
    #39845368
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
LAG, LEAD
...
Рейтинг: 0 / 0
05.08.2019, 13:10
    #39845370
хорошо я согласен
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
спасибо!
...
Рейтинг: 0 / 0
05.08.2019, 13:12
    #39845371
londinium
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
что-то такое:
Код: 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
06.08.2019, 16:44
    #39845953
AlexKM2020
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
Код: 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
06.08.2019, 16:47
    #39845958
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
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
06.08.2019, 19:24
    #39846055
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как удалить все повторы подряд из последовательности AAABBBABAAA?
хорошо я согласенНеобходимо получить таблицу, у которой останутся только те строки, у которых предыдущее значение отличается от текущего."Получить таблицу" я лично воспринимаю как "привести исходную таблицу к указанному виду" - т.е. удалить всё, что не соответствует условию. Но дальше Вы показываее получение не таблицы, а выборки...

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

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

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


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