powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Простое задание)) я в тупике- всю башку сломал
13 сообщений из 13, страница 1 из 1
Простое задание)) я в тупике- всю башку сломал
    #40035266
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
толь я не проснулся, толи лыжи не едут, но я сдался)
заданка

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', 100.00)
insert into T (id, Number, Price) values (5, 'C', 300.00)
insert into T (id, Number, Price) values (6, 'D', 300.00)
insert into T (id, Number, Price) values (7, 'D', 300.00)

-- удалить из таблицы T повторяющиеся номера Number,
-- оставив в ней только номера с максимальной ценой,
-- по возможности, одним запросом.

вот ето я и не понял)

фигня типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT * 
FROM	(
			SELECT	*		
					,ROW_NUMBER() OVER(PARTITION BY Number ORDER BY Price DESC) AS NUM
			FROM T
		) AS T1
WHERE T1.NUM = 1 


работает но тут как без подзапроса я не понимаю) если бруд из ИД не делать
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035272
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
DELETE T1 
FROM	(
			SELECT	*		
					,ROW_NUMBER() OVER(PARTITION BY Number ORDER BY Price DESC) AS NUM
			FROM T
		) AS T1
WHERE T1.NUM > 1 


Код: sql
1.
2.
3.
4.
5.
6.
delete a
from
 T a left join
 T b on b.Number = a.Number and b.Price > a.Price
where
 b.Number is null;
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035275
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ан не... делит тоже запрос))))))) только не на выборку а на удаление
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035277
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в том то и прикол что если не гадить рандомный ИД то не выйдет 1 запросом
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035285
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanitto
ан не... делит тоже запрос)))))))
Запрос - это то, что выполняется как единая инструкция, а не конкретный select или delete из этой инструкции.
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035288
pahanitto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот я и не понял это ОГОВОРКИ на счет 1 запросом... посему и гадал... вроде да 1 запрос как еденица это я понимаю.... но вдруг я чтото не так понимаю) мож что-то еще имелось ввиду
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035290
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pahanitto
вот я и не понял это ОГОВОРКИ на счет 1 запросом
Тогда см. 2-й способ из 22262430
Только там ошибочка. Нужно
Код: sql
1.
2.
3.
4.
5.
6.
delete a
from
 T a left join
 T b on b.Number = a.Number and b.Price > a.Price
where
 b.Number is not null;
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035301
Фотография PaulYoung
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

в этом случае останутся дубли по D. Правда, точно не ясно, правильно это или нет.
Код: sql
1.
2.
3.
4.
5.
6.
7.
DELETE t FROM T AS t
WHERE t.Id <> (
  SELECT TOP 1 x.Id
  FROM T AS x
  WHERE x.Number = t.Number
  ORDER BY x.Price DESC
)
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035312
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulYoung
в этом случае останутся дубли по D.
Добавьте отбор по id (мин/макс) при равенстве цен.

Код: sql
1.
2.
3.
4.
5.
6.
DELETE t1
FROM T t1
JOIN T t2 ON     t1.Number = t2.Number
             AND (    t1.Price < t2.Price
                   OR (     t1.Price = t2.Price 
                        AND t1.id > t2.id ))



fiddle
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40035586
Код: sql
1.
2.
3.
4.
5.
6.
;WITH CTE AS (
	SELECT *, ROW_NUMBER() OVER (PARTITION BY Number ORDER BY Price DESC) AS NUM
	FROM T
)
DELETE FROM CTE
WHERE NUM > 1 
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40037131
Uridian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pahanitto
заданка

Задание, действительно, простое, однако на очном собеседовании его решает 1 из 10-15 претендентов. (не на бумажке, а в тестовой среде, на компьютере).
Поэтому, решили теперь высылать его для заочного решения, а на собеседовании даём еще более простое.
(ПС. но и это более простое умудряются не решить).
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40037224
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там не нужны сортировки:

Код: sql
1.
2.
3.
4.
5.
delete dbo.t
where exists (
  select * from dbo.t t2 
  where (t.Number = t2.Number and t.Price < t2.Price)
    or (t.Number = t2.Number and t.Price = t2.Price and t.id < t2.id)) -- < > по вкусу
...
Рейтинг: 0 / 0
Простое задание)) я в тупике- всю башку сломал
    #40037231
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Джонни Кейдж
Код: sql
1.
2.
3.
4.
5.
6.
;WITH CTE AS (
	SELECT *, ROW_NUMBER() OVER (PARTITION BY Number ORDER BY Price DESC) AS NUM
	FROM T
)
DELETE FROM CTE
WHERE NUM > 1 

никак не привыкну, что в сиквеле всяких удалений больше, чем в оракле
:)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Простое задание)) я в тупике- всю башку сломал
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]