Как показать поля из недавно добавленных деталей в виде? - PullRequest
2 голосов
/ 09 апреля 2011

QUERY:

drop table #foot
create table #foot (
    id int primary key not null,
    name varchar(50) not null
)
go

drop table #note
create table #note (
    id int primary key not null,
    note varchar(MAX) not null,
    foot_id int not null references #foot(id)
)
go

insert into #foot values 
(1, 'Joe'), (2, 'Mike'), (3, 'Rob')
go

insert into #note (id, note, foot_id) values (1, 'Joe note 1', 1)
go
insert into #note (id, note, foot_id) values(2, 'Joe note 2', 1)
go
insert into #note (id, note, foot_id) values(3, 'Mike note 1', 2)
go

select F.name, N.note, N.id
from #foot F left outer join #note N on N.foot_id=F.id

РЕЗУЛЬТАТ:

enter image description here

ВОПРОС:

Как мне создать представление / запрос, в результате чего по одной строке для каждой основной записи (#foot) вместе с полями из последней вставленной детали (#note), если таковые имеются?

ЗАДАЧА:

enter image description here

(ПРИМЕЧАНИЕ: я бы сказал, какой из них самый последний, это идентификатор, который был бы выше для более новых записей)

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Предполагая, что идентификатор, созданный в таблице #note, всегда является инкрементным (навязывается с помощью IDENTITY или путем управления вставками, чтобы всегда увеличивать на максимальное значение), вы можете использовать следующий запрос (который использует функцию ранга):

WITH Dat AS
(
    SELECT f.name, 
             n.note, 
             n.id,
             RANK() OVER(PARTITION BY n.foot_id ORDER BY n.id DESC) rn
    FROM #foot f LEFT OUTER JOIN #note n 
    ON n.foot_id = f.id  
)
SELECT *
  FROM Dat
    WHERE rn = 1
1 голос
/ 09 апреля 2011
select t.name, t.note, t.id
    from (select F.name, N.note, N.id,
                 ROW_NUMBER() over(partition by F.id order by N.id desc) as RowNum
              from #foot F 
                  left outer join #note N 
                      on N.foot_id=F.id) t
    where t.RowNum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...