Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удалить вторую подряд идущую строчку с тем же полем  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5134
Доброго дня, коллеги.
Столкнулся со следующей задачей.
Есть некая таблица в которой содержится идентификатор, дата и поле, которое может принимать 2 значения.
Каким образом можно убрать вторую подряд идущую строчку с тем же значением в поле, верхнюю, либо нижнюю?
Скриншот прикладываю: http://clip2net.com/s/2Eoba
27 дек 12, 18:13    [13696783]     Ответить | Цитировать Сообщить модератору
 Re: Удалить вторую подряд идущую строчку с тем же полем  [new]
kalimba
Member

Откуда:
Сообщений: 297
Александр52,

Напишите пожалуйста версию сервера.
27 дек 12, 19:12    [13696954]     Ответить | Цитировать Сообщить модератору
 Re: Удалить вторую подряд идущую строчку с тем же полем  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5134
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2861.0 (X64) Aug 20 2012 19:28:58 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
27 дек 12, 19:18    [13696964]     Ответить | Цитировать Сообщить модератору
 Re: Удалить вторую подряд идущую строчку с тем же полем  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3015
row_number() over ()

?
27 дек 12, 19:32    [13696986]     Ответить | Цитировать Сообщить модератору
 Re: Удалить вторую подряд идущую строчку с тем же полем  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2565
declare @t table (id int identity(1,1), dt datetime, v int)

insert @t (dt, v)
select '20121224 14:18:23', 1 union all
select '20121224 15:28:33', 1 union all
select '20121224 16:28:33', 2 union all
select '20121225 12:11:26', 2 union all
select '20121225 13:15:43', 2 union all
select '20121225 14:16:45', 1 union all
select '20121226 11:11:11', 1 union all
select '20121226 12:19:20', 2 union all
select '20121227 15:15:25', 2 union all
select '20121227 15:34:15', 1

select * from @t

delete t from @t t
join
(
select
  id,
  row_number() over (partition by convert(varchar, dt, 112), v order by id) as rn
from @t
) x on t.id = x.id
where x.rn > 1 

select * from @t
27 дек 12, 23:17    [13697876]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить