Выберите последний полный блок строк - PullRequest
0 голосов
/ 05 июля 2018

У меня есть данные, похожие на

ID    Position
1     1           
2     2           
3     3           
4     1           
5     2           
6     3           
7     1           
8     2           

и я хочу выбрать последний набор строк, содержащий все позиции, от 1 до 3. Под последним я подразумеваю набор строк с наибольшим значением в столбце идентификатора. Желаемый результат -

ID    Position
4     1           
5     2          
6     3           

Как мне этого добиться?

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете использовать этот метод, который находит последний идентификатор, где Позиция равна 3, и получает две строки, предшествующие этому. Это предполагает, что Позиция является последовательной, как в данных образца.

declare @table table (ID int identity(1,1), Position int)
insert into @table
values
(1),(2),(3),(1),(2),(3),(1),(2)

select top 3 
*
from @table
where ID <=(
            select max(ID)
            from @table
            where Position = 3)
order by ID desc 

Или вы можете сделать это с AND в вашем предложении WHERE. Я бы сохранил идентификатор как переменную, поэтому вам нужно будет выполнить агрегацию только один раз.

declare @id int = ( select max(ID)
                    from @table
                    where Position = 3)
select *
from @table
where ID <= @id
  and ID >= @id - 2
order by ID       
...