ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
22. августа 2014 17:16
----------------------------------------
-- ИСХОДНЫЕ ДАННЫЕ:
----------------------------------------
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

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Способы заработка на сайте
На этом блоге было много постов про производство и раскрутку сайтов. Но пока не было про заработок на них. Пора исправить этот недочет. Здесь будут описаны по возможности не фантастичные, и не супер низко прибыльные способы. Также упор будет сделан именно на организацию процесса, а не технических деталях, которых в обилии в интернете. Несмотря на то, что как пр...

CommonLibrary.NET - полезных вспомогательные компоненты под C# 4.0
Коллекция удобных для повторного использования кода и компонентов, написанных на C # 4.0. Они реализуют следующие шаблоны (решают задачи): ActiveRecord, CSV, анализ командной строки, конфигурация, проверки, коллекции, аутентификация и многое другое. Представляет собой аналог библиотеки Java Commons из Java. Идеальна в качестве библиотеки утилит для разработчика н...

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий