powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь с простым запросом.
4 сообщений из 4, страница 1 из 1
Нужна помощь с простым запросом.
    #40131173
_MadMax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.

Подскажите пожалуйста в решении.
Есть вот такой набор :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
a       b      c
11	41	41
12	30	30
13	51	51
14	19	20
15	48	50
16	42	47
17	44	45
18	47	49
19	44	45
20	25	25
21	26	26
22	25	25
25	20	20



Необходимо убрать строки идущие подряд в которых значения столбцов b и с совпадают оставив только первою и последнюю из этих строк. В случае если подобные строки находятся в конце таблице оставить только первую из них.
Сохранив порядок сортировки.
Вот пример ожидаемого результата :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
a       b      c
11	41	41
13	51	51
14	19	20
15	48	50
16	42	47
17	44	45
18	47	49
19	44	45
20	25	25
...
Рейтинг: 0 / 0
Нужна помощь с простым запросом.
    #40131175
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_MadMax_, примерно так
Код: 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.
declare @t table(a int, b int, c int)
insert into @t(a,b,c) values
(11,	41,	41),
(12,	30,	30),
(13,	51,	51),
(14,	19,	20),
(15,	48,	50),
(16,	42,	47),
(17,	44,	45),
(18,	47,	49),
(19,	44,	45),
(20,	25,	25),
(21,	26,	26),
(22,	25,	25),
(25,	20,	20)

select X.a, X.b, X.c
from (
	select  t.*
		,prev_b = lag(t.b, 1) over (order by t.a) 
		,prev_c = lag(t.c, 1) over (order by t.a)
		,next_b = lead(t.b, 1) over (order by t.a) 
		,next_c = lead(t.c, 1) over (order by t.a)
	from @t t) X
where	isnull(X.prev_b, 0) != isnull(X.prev_c, 1) 
	or X.next_b != X.next_c 
...
Рейтинг: 0 / 0
Нужна помощь с простым запросом.
    #40131181
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @t table(a int, b int, c int)
insert into @t(a,b,c) values
(11,	41,	41),
(12,	30,	30),
(13,	51,	51),
(14,	19,	20),
(15,	48,	50),
(16,	42,	47),
(17,	44,	45),
(18,	47,	49),
(19,	44,	45),
(20,	25,	25),
(21,	26,	26),
(22,	25,	25),
(25,	20,	20)

;With s As (
Select *, lag(Case when b=c then 1 Else 0 End) over (order by a) t1, lead(Case when b=c then 1 Else 0 End) over (order by a) t2  from @t a
)
Select a, b, c  from s
Where not (isNull(t1, 0) = 1 and t2 = 1) 
...
Рейтинг: 0 / 0
Нужна помощь с простым запросом.
    #40131182
_MadMax_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое всем спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь с простым запросом.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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