|
Какой рейтинг вас больше интересует?
|
Задание по TSQL перед собеседованием2014-08-22 17:16:00 (читать в оригинале)
----------------------------------------
-- ИСХОДНЫЕ ДАННЫЕ:
----------------------------------------
use tempdb
go
if object_id ('T') is not null drop table T
go
create table T (id int primary key, Number varchar(50), Price money)
go
insert into T (id, Number, Price) values (1, 'A', 100.00)
insert into T (id, Number, Price) values (2, 'A', 90.00)
insert into T (id, Number, Price) values (3, 'B', 200.00)
insert into T (id, Number, Price) values (4, 'C', 300.00)
insert into T (id, Number, Price) values (5, 'D', 300.00)
insert into T (id, Number, Price) values (6, 'D', 300.00)
GO
----------------------------------------
-- ЗАДАНИЕ 1:
-- удалить из таблицы T повторяющиеся номера Number,
-- оставив в ней только номера с максимальной ценой,
-- по возможности, одним запросом.
----------------------------------------
--проверка после удаления:
select Number, Price from T order by 1, 2
/*
Number Price
A 100.00
B 200.00
C 300.00
D 300.00
*/
----------------------------------------
-- РЕШЕНИЕ 1:
----------------------------------------
DELETE FROM T
WHERE T.id NOT IN
(
SELECT id -- , Number, Price
FROM
(
SELECT T.id AS id, T.Number AS Number, T.Price AS Price,
ROW_NUMBER() OVER(PARTITION BY T.Number ORDER BY T.Number, T.Price DESC ) AS R
FROM T
) AS PT
WHERE R = 1
)
GO
----------------------------------------
-- ЗАДАНИЕ 2:
-- порекомендуйте, какой построить индекс на таблице T,
-- чтобы уменьшить время выполнения запроса на удаление
----------------------------------------
----------------------------------------
-- РЕШЕНИЕ 2:
----------------------------------------
-- 1) нужен индекс по ид, обычно он является первичным ключом и создается
-- во время создания таблицы, поэтому предполагаем что он уже есть
-- 2) еще для ускорения нужен такой сложный индекс:
CREATE INDEX idxDelDuplicatesInT
ON T (Number ASC, Price DESC)
GO
|
Категория «Предметы»
Взлеты Топ 5
Падения Топ 5
Популярные за сутки
|
Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.
взяты из открытых общедоступных источников и являются собственностью их авторов.
