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

Откуда:
Сообщений: 221
У меня есть табличка, состоящая из следующих полей :ID, Summ, Date
так получилось, что дата задвоилась, и нужно изменить половину записей, только нет точного критерия, нужно выбрать одну из записей в абсолютно произвольном порядке и заменить дату, вот что имеем


ID, Summ, Date
1 100 01.05.2010
2 100 01.05.2010
3 200 01.05.2010
4 200 01.05.2010
5 300 01.05.2010
6 300 01.05.2010


нужно все это превратить в

ID, Summ, Date
1 100 01.05.2010
2 100 01.06.2010
3 200 01.05.2010
4 200 01.06.2010
5 300 01.05.2010
6 300 01.06.2010


Как выбрать записи, которые дублируются, именно одну из них, чтобы потом заменить дату?


или еще как вариант можно ли использовать UPDATE так чтобы после обновления первой записи запрос прерывался?
15 июн 11, 11:47    [10814795]     Ответить | Цитировать Сообщить модератору
 Re: Update первой произвольной записи  [new]
Orland
Member

Откуда: Ростов
Сообщений: 71
Update t
Set
	Summ = ,
	Date = 
from
	@t t
	inner join
	(
		Select
			ID = max(ID),
			Summ,
			date
		from
			@t
		group by
			summ, date
		having count(*) > 1	
			
	) data on
		t.ID = data.ID
15 июн 11, 11:53    [10814862]     Ответить | Цитировать Сообщить модератору
 Re: Update первой произвольной записи  [new]
monsenior
Member

Откуда: Москва
Сообщений: 972
maxterbear,

update top 1 table1 set
  col1 = '1111';

автор
TOP ( expression ) [ PERCENT ]
Указывает количество или процент строк, которые будут обновлены. expression может быть либо числом, либо процентной долей строк.

Строки, на которые ссылается выражение TOP, используемое с инструкцией INSERT, UPDATE, MERGE или DELETE, не расположены в определенном порядке.
15 июн 11, 11:55    [10814876]     Ответить | Цитировать Сообщить модератору
 Re: Update первой произвольной записи  [new]
el_sh
Member

Откуда:
Сообщений: 360
maxterbear, не?

USE tempdb
CREATE TABLE #ttt(ID INT IDENTITY(1,1), Summ DECIMAL(18,3), Date DATETIME)
INSERT INTO #ttt (
	Summ,
	Date
) 
SELECT  100,'2010-05-01'
UNION ALL SELECT  100,'2010-05-01'
UNION ALL SELECT  200,'2010-05-01'
UNION ALL SELECT  200,'2010-05-01'
UNION ALL SELECT  300,'2010-05-01'
UNION ALL SELECT  300,'2010-05-01'

UPDATE #ttt
SET Date=DATEADD(m,1,date)
WHERE id IN(SELECT id FROM (
SELECT *,ROW_NUMBER()OVER (PARTITION BY Summ,
	Date ORDER BY id) r FROM #ttt)z WHERE r=2)
SELECT * FROM #ttt
DROP TABLE #ttt
15 июн 11, 12:06    [10814988]     Ответить | Цитировать Сообщить модератору
 Re: Update первой произвольной записи  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
;with t
as
(
 select
  ID, summ, [Date], row_number() over (partition by [Date] order by ID) as n
 from
  Tbl
)
update t
 set
  [Date] = dateadd(month, n - 1, [Date])
where
 n > 1
15 июн 11, 12:08    [10815006]     Ответить | Цитировать Сообщить модератору
 Re: Update первой произвольной записи  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Промахнулся. Исправленный вариант:
;with t
as
(
 select
  ID, summ, [Date], row_number() over (partition by [Date], summ order by ID) as n
 from
  Tbl
)
update t
 set
  [Date] = dateadd(month, n - 1, [Date])
where
 n > 1
15 июн 11, 12:16    [10815074]     Ответить | Цитировать Сообщить модератору
 Re: Update первой произвольной записи  [new]
maxterbear
Member

Откуда:
Сообщений: 221
Orland, el_sh, invm - Спасибо вам огромное!!!
15 июн 11, 12:29    [10815165]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить