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

Откуда: SPB
Сообщений: 954
Есть селект в котором нужно выкинуть наибольшее и наименьшее значение. Подскажите пожалуйста как такое возможно сделать одним запросом и возможно ли вообще без временных таблиц. Спасибо
6 окт 11, 18:41    [11397455]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
select
  a.*
from [воздух] a
cross apply (
  select [min] = min(x.значение), [max] = max(x.значение) from [воздух] x -- сюда условие, если надо по каким группам.
) b
where
  a.[значение] != b.[min]
  and a.[значение] != b.[max]
6 окт 11, 18:45    [11397475]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
RasimS
Есть селект в котором нужно выкинуть наибольшее и наименьшее значение. Подскажите пожалуйста как такое возможно сделать одним запросом и возможно ли вообще без временных таблиц. Спасибо


как-то так...

select min(хзкакоеполе), min(хзкакоеполе) from хзкакаятаблица
6 окт 11, 18:45    [11397476]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
RasimS
Member

Откуда: SPB
Сообщений: 954
Гавриленко Сергей Алексеевич
select
  a.*
from [воздух] a
cross apply (
  select [min] = min(x.значение), [max] = max(x.значение) from [воздух] x -- сюда условие, если надо по каким группам.
) b
where
  a.[значение] != b.[min]
  and a.[значение] != b.[max]


Спасибо. Так работает. Правда дороговато по ресурсам выходит
6 окт 11, 19:05    [11397591]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
ura
Member [заблокирован]

Откуда: Киев
Сообщений: 932
select * from (
	select *
		,min(field) over () as min_value
		,max(field) over () as max_value
	from tabl
	) as a
where a.field not in (min_value,max_value)
6 окт 11, 19:16    [11397624]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
iljy
Member

Откуда:
Сообщений: 8711
RasimS
Спасибо. Так работает. Правда дороговато по ресурсам выходит

Чтобы выходило не дороговато, надо приводить скрипты таблиц вместе с индексами, желательно еще и данные.
6 окт 11, 19:17    [11397628]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
WITH CTE AS
(
 SELECT
  ROW_NUMBER()OVER(ORDER BY Field) N,
  ROW_NUMBER()OVER(ORDER BY Field DESC) X,
  *
 FROM T
)
SELECT *
FROM CTE
WHERE N>1 AND X>1;
6 окт 11, 20:35    [11397886]     Ответить | Цитировать Сообщить модератору
 Re: Откинуть наибольшие и наименьшее значение одним запросом  [new]
ё
Guest
with cte as (select 1 as d union all select d+1 from cte where d<10)

select * from cte
where d > any (select d from cte)
  and d < any (select d from cte)
6 окт 11, 21:46    [11398166]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить