Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
aleks2
Хе-хе! Напомнило мне мое последнее собеседование...


Жалко, что Вы не в Москве...
8 май 12, 20:10    [12524767]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
pkarklin
aleks2
Хе-хе! Напомнило мне мое последнее собеседование...


Жалко, что Вы не в Москве...


Я в том смысле, что есть предложение работы. :)
8 май 12, 20:10    [12524770]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
aleks2
Guest
ola_ya_22
aleks2,
и в результате?


А чо в результате? Выразили желание взять на работу.
8 май 12, 20:11    [12524771]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pkarklin
ola_ya_22
таблица состоит из 1 такого столбца


Задача одной инструкцией DELETE в общем случае не решается.

Глядя что считать одной инструкцией... Одним запросом решается легко, разными способами. Вот только на прошлой неделе одному такому лентяю как ТС для подобной задачи несколько разных примеров приводил.
8 май 12, 22:05    [12525028]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
rector
Member

Откуда: Киев
Сообщений: 57
так чтоб вообще не модифицировать исходную таблицу, не нумеровать в ней строки и т.д.

CREATE TABLE test
(DATA NVARCHAR(50))

INSERT INTO test (data) 
select 'string1'
UNION ALL
select 'string1'
UNION ALL
select 'string1'
UNION ALL
select 'string1'
UNION ALL
select 'string2'
UNION ALL
select 'string3'
UNION ALL
select 'string3'
UNION ALL
select 'string4'
UNION ALL
select 'string5'
UNION ALL
select 'string5'
UNION ALL
select 'string5'

SELECT * FROM row r

;WITH row (num, data)
AS
(
	SELECT ROW_NUMBER() OVER ( ORDER BY t.DATA) AS NUM, t.[DATA]
	FROM test t
)

delete  FROM row
where row.num in (select t1.num 
FROM  row t1
JOIN row t2 ON t2.data=t1.DATA AND t1.num<t2.num
GROUP BY t1.num
)

SELECT * FROM test t
8 май 12, 23:55    [12525450]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kDnZP
Одним запросом решается легко, разными способами


Наверное, стОит привести пример этого запроса...
9 май 12, 00:02    [12525465]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
rector,

А теперь подумайте, почему результат этого "запроса" не воспроизводим...

Сообщение было отредактировано: 9 май 12, 00:11
9 май 12, 00:11    [12525481]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
rector
Member

Откуда: Киев
Сообщений: 57
pkarklin,

что вы имеете в виду под "результат не воспроизводим" ?
у меня вполне даже воспроизводим.
если ошибся - поправьте.
9 май 12, 00:14    [12525484]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
rector,

Боюсь, мне придется процитировать основы реляционной теории... Точно так же можно расчитывать на то, что запрос без ORDER BY вернет записи в порядке кластерного индекса.

ЗЫ. На собеседовании мне не нужен результат. Мне остро необходимо понимание происходящего...
9 май 12, 00:24    [12525501]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pkarklin
kDnZP
Одним запросом решается легко, разными способами


Наверное, стОит привести пример этого запроса...

Адаптировать под задачу, али не надо? 12505945
9 май 12, 00:34    [12525521]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kDnZP,

Я пытаюсь донести до ума некоторых, как бы профессионалов, в написании запросов, что написание запросов, дающих определенный результат, ни есть самоцель. Иногда надо думать чуть ширше...
9 май 12, 00:41    [12525544]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
rector
Member

Откуда: Киев
Сообщений: 57
pkarklin,

бояться не надо, можете приводить, если хочется.

касательно условий данной задачи запрос нормально отрабатывает.
если вас волнует порядок размещения данных, то его можно сохранить как в исходной таблице (хотя вы сами напоминали про основы реляционной теории, порядок не важен абсолютно) да и в контексте этой задачи не оговаривалось о порядке.

З.Ы. Ну мы с вами и не на собеседовании )))


kDnZP,

Да, хотелось бы посмотреть адаптацию )))
9 май 12, 00:41    [12525545]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
rector,

От слова "порядок" меня всегда передергивает...

автор
касательно условий данной задачи


Когда Вы дорастете до исправления "условий задачи" - Вам цены не будет...

Сообщение было отредактировано: 9 май 12, 01:00
9 май 12, 00:58    [12525583]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pkarklin, про ширше, глубже и дальше и выше можете мне не рассказывать. Иль вы думаете я с нумерациями не знаком??? Вот, не так давно 12239207 в очередной раз было обсуждение...

Но подход аля "мне не надобно решение", мне надобно поговорить - ради бога, вполне оправдан. Но по факту, я бы тупо написал нечто вроде:
DECLARE @test TABLE
(DATA NVARCHAR(50))

INSERT INTO @test (data) 
select 'string1'
UNION ALL
select 'string1'
UNION ALL
select 'string1'
UNION ALL
select 'string1'
UNION ALL
select 'string2'
UNION ALL
select 'string3'
UNION ALL
select 'string3'
UNION ALL
select 'string4'
UNION ALL
select 'string5'
UNION ALL
select 'string5'
UNION ALL
select 'string5'

SELECT * FROM @test

;WITH row (num, data)
AS
(
	SELECT ROW_NUMBER() OVER ( PARTITION BY t.DATA ORDER BY t.DATA) AS NUM, t.[DATA]
	FROM @test t
)
delete FROM row
where row.num>1

SELECT * FROM @test t

и горя бы не знал)))
9 май 12, 01:13    [12525618]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kDnZP,

Когда Вы поймете, что "нумерация" в том виде, как ее в этом топике преподносят - ничего не значит, приходите...
9 май 12, 01:16    [12525630]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pkarklin
kDnZP,

Когда Вы поймете, что "нумерация" в том виде, как ее в этом топике преподносят - ничего не значит, приходите...

ola_ya_22
kDnZP,

столбец
AAA
ABA
BAA
BBB
AAA
BBA
BBA

Должно получиться

AAA
ABA
BAA
BBB
BBA

select distinct не подойдет
нужно именно удаление


Ку?
* Вы вродь человек разумный, но походу упертый...
** Когда научитесь обосновывать свое мнение, приходите, пообщаемся ;)
9 май 12, 01:23    [12525651]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
rector
Member

Откуда: Киев
Сообщений: 57
pkarklin,

может просто ваше решение (максимально простое, правильное и работоспособное) покажете ?
а то столько разговоров.
9 май 12, 01:26    [12525663]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kDnZP
Вы вродь человек разумный, но походу упертый...


Вы даже не представляете, какой. Писателей таких запросов я даже рядом не подпущю к Production (ну в смысле cначала к dev, потом к qa) системе, ибо писать запросы - это одно, а мозг включать - это другое...
9 май 12, 01:31    [12525673]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
pkarklin
Вы даже не представляете, какой. Писателей таких запросов я даже рядом не подпущю к Production (ну в смысле cначала к dev, потом к qa) системе, ибо писать запросы - это одно, а мозг включать - это другое...

Пичалька. Как жеж я теперь... Я ведь не переживу, пойду повешусь.
9 май 12, 01:34    [12525680]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
rector,

У изначально тупой задачи нет никаких вариантов решения. Что я и пытаюсь здесь донести...
9 май 12, 01:34    [12525681]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
kDnZP
Пичалька. Как жеж я теперь... Я ведь не переживу, пойду повешусь.


А вот это вот совершенно напрасно. :( Прежде чем городить запросы, которые, якобы, дают нужный результат, стОит показать ТС то "место", в котором он не прав.
9 май 12, 01:38    [12525685]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
последний вопросик....

select t1.Autor
from Book1 t1,Book1 t2
where t1.Autor=t2.Autor and t1.Pub_Year<>t2.Pub_Year and t1.Title=t2.Title
group by t1.Autor

запрос должен выдавать тех авторов, книги которых не переиздавались.
В моем запросе, если книги переиздавались в одном и том же году запрос будет работать не правильно.
подскажите. где ошибка
таблица имеет вид:
ID Title Autor Pub_Year Publisher
9 май 12, 11:31    [12526008]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
rector
Member

Откуда: Киев
Сообщений: 57
ola_ya_22,

ну так уберите условие t1.Pub_Year<>t2.Pub_Year
оно вам всёравно не надо
9 май 12, 11:39    [12526020]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
rector
Member

Откуда: Киев
Сообщений: 57
ola_ya_22,

и вместо t1.Pub_Year<>t2.Pub_Year поставьте t1.ID<>t2.ID
9 май 12, 11:41    [12526029]     Ответить | Цитировать Сообщить модератору
 Re: подскажите алгоритм  [new]
ola_ya_22
Member

Откуда:
Сообщений: 251
rector,
DECLARE @test TABLE
(С NVARCHAR(50))

INSERT INTO @test (С)
select 'AAA'
UNION ALL
select 'ABA'
UNION ALL
select 'AAB'
UNION ALL
select 'ABB'
UNION ALL
select 'BBA'
UNION ALL
select 'AAA'
UNION ALL
select 'AAA'
UNION ALL
select 'ABB'
UNION ALL
select 'BBA'

SELECT * FROM @test

;WITH row (num, data)
AS
(
SELECT ROW_NUMBER() OVER ( PARTITION BY t.С ORDER BY t.С) AS NUM, t.[С]
FROM @test t
)
delete FROM row
where row.num>1

SELECT * FROM @test t

работает не правильно.(((
не удаляет дублирующие строки.
подскажите, где ошибка
9 май 12, 23:23    [12527721]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить