Как правильно объединить две таблицы в группы по столбцу и выбрать только одну строку для каждой записи? - PullRequest
1 голос
/ 07 июля 2011

У меня есть таблица экипажей

           CREATE TABLE crew(crew_id INT, crew_name nvarchar(20), )

И таблица журнала времени, которая представляет собой очень длинный список действий, выполняемых командой

  CREATE TABLE [dbo].[TimeLog](
[time_log_id] [int] IDENTITY(1,1) NOT NULL,
[experiment_id] [int] NOT NULL,
[crew_id] [int] NOT NULL,
[starting] [bit] NULL,
[ending] [bit] NULL,
[exception] [nchar](10) NULL,
[sim_time] [time](7) NULL,
    [duration] [int] NULL,
[real_time] [datetime] NOT NULL )

Я хочу иметьпредставление, которое показывает только одну строку для каждого экипажа с самой последней sim_time + длительностью.

Является ли представление способом, которым нужно идти?Если да, то как мне это написать?Если нет, каков наилучший способ сделать это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

Вот запрос, чтобы выбрать то, что вы хотите:

select * from (
    select 
    *,
    row_number() over (partition by c.crew_id order by l.sim_time desc) as rNum
    from crew as c
    inner join TileLog as l (on c.crew_id = l.crew_id)
) as t
where rNum = 1
0 голосов
/ 07 июля 2011

это зависит от того, для чего вам нужны эти данные.
в любом случае, простой запрос для определения времени последнего сима будет выглядеть примерно так:

select C.*, TL.sim_time 
from crew C /*left? right? inner?*/ join TimeLog TL on TL.crew_id = C.crew.id
where TL.sim_time in (select max(timelog_subquery.sim_time) from TimeLog timelog_subquery where crew_id = C.crew_id )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...