连接两个表的正确方法是什么,按列分组,每个记录只选择一行?

时间:2011-07-07 07:08:05

标签: sql sql-server sql-server-2005 tsql sql-server-2008

我有一个船员表

           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 个答案:

答案 0 :(得分:3)

以下是一个选择所需内容的查询:

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

答案 1 :(得分:0)

这取决于您需要的数据。
无论如何,找到最新的sim时间的简单查询就像是

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 )
相关问题