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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
declare @t1 table (id int,val int,other nvarchar(255))

insert into @t1 values                     (1,12,NULL),
                                           (4,12,NULL),
					   (4,12,NULL),
					   (2,3,NULL),
					   (2,4,NULL),
					   (2,5,NULL)
-- как пофильтровать сначала по максимально val , если их несколько то выбрать макс Id
-- остальный строки удалить.

-- должно остаться    4  12
--                    2   3
--                    2   4 
--                    2   5 

select * from @t1
...
Рейтинг: 0 / 0
sql фильтр по нескольким колонкам
    #40033682
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kypiwindy1,

если честно какая то ерунда в вопросе.

результирующий набор который Вы хотите получить достигается:
Код: sql
1.
2.
3.
select max(id), val
from @t1 
group by val



но с кучей оговорок.
...
Рейтинг: 0 / 0
sql фильтр по нескольким колонкам
    #40033684
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kypiwindy1,

А вот если нужен еще и other, то чуть сложнее:
Код: sql
1.
2.
3.
4.
5.
6.
7.
;WITH MaxVal AS (
  SELECT id, val, other, ROW_NUMBER() OVER (PARTITION BY val ORDER BY id DESC) AS rn
  FROM @t1 )
SELECT id, val, other
FROM MaxVal
WHERE rn=1
ORDER BY id DESC
...
Рейтинг: 0 / 0
sql фильтр по нескольким колонкам
    #40033767
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
SELECT top(1) with ties *
  FROM @t1
Order BY ROW_NUMBER() OVER (PARTITION BY val ORDER BY id DESC) ASC


Но предыдущий оратор, в общем, выдал более правильное решение, если полученную выборку планируется в дальнейшем использовать в подзапросе.
Т.к. top(1) сбивает с толку оптимизатор и он, в дальнейшем, будет пытаться соединить результат выборки с внешним запросом через nested loop, что может оказаться очень неоптимально, если такая подвыборка возвращает много записей.

Для одиночного запроса - монопениссуарно.
...
Рейтинг: 0 / 0
sql фильтр по нескольким колонкам
    #40033770
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Для одиночного запроса - монопениссуарно.
Уже неоднократно писалось, что нет
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
use tempdb;
set ansi_nulls, quoted_identifier, xact_abort on;
go

create table dbo.t (id int identity primary key, g int, v float);

insert into dbo.t
 (g, v)
 select top (2000000)
  row_number() over (order by 1/0) % 10,
  rand(checksum(newid()))
 from
  master.dbo.spt_values a cross join
  master.dbo.spt_values b;

create index IX_t__g__v on dbo.t (g, v);
go

declare @g int, @v float;

set statistics time on;
--set statistics xml on;

with t as
(
 select
  g, v, row_number() over (partition by g order by v) as rn
 from
  dbo.t
)
select
 @g = g, @v = v
from
 t
where
 rn = 1
option
 (maxdop 1);

select top (1) with ties
 @g = g, @v = v 
from
 dbo.t
order by
 row_number() over (partition by g order by v)
option
 (maxdop 1);

set statistics time off;
--set statistics xml off;
 
drop table dbo.t;
go


Код: plaintext
1.
2.
3.
4.
5.
 SQL Server Execution Times:
   CPU time = 125 ms,  elapsed time = 132 ms.

 SQL Server Execution Times:
   CPU time = 437 ms,  elapsed time = 441 ms.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / sql фильтр по нескольким колонкам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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