2016-03-07 107 views
0

我的数据库是SQL Server 2008我有一个3列的表格。名称,类型,时间。为第一列中的每一列选择第一列第三列

我需要选择第一个(通过时间 - 第3栏)事件发生的每个名字的和是1型 的例如它可以是

(乔治,1,15:00) (George,1,15:00) (George,1,16:00) (George,1,16:10) (Mary,1,15:00) (Mary,3,15:00) (Mary,1,16:00) (Mary,1,16:10)

我只需要得到(George,1,15:00) (Mary,1,15:00)

我这样做,但它不起作用。我知道这不是正确使用独特的。

select distinct(an1. name), an2.Time 
    from mytable an1 
    left join mytable an2 
    on an1.id=an2.id 
    where an1.type =1 

回答

1

您可以使用ROW_NUMBER此:

SELECT name, [Time] 
FROM (
    SELECT name, [Time], 
     ROW_NUMBER() OVER (PARTITION BY name 
          ORDER BY [Time] DESC) AS rn 
    FROM mytable 
    WHERE type = 1) AS t 
WHERE t.rn <= 1 
+0

这工作。非常感谢你! –

1

您可以使用跨应用或ROWNUMBER或一组

; with cte 
     as 
     (
     select distinct name from mytable where type=1 
     ) 
     select * from cte t1 
     cross apply 
     (
     select top 1 time from mytable t2 where t1.name=t2.name order by time desc) b 

with cte 
as 
(select name,time, 
row_number() over (partition by name order by time desc) as rn 
from mytable where type=1 
) 
select * from cte where rn=1 
+0

谢谢你的答案,我尝试了第一个,因为我可以更容易地理解它。但是,它返回了一列中不同的名称和一列与所有相同的时间。我需要每个名字的第一次。请看我编辑的帖子。 –

+0

哎呀现在编辑,匆忙我忘记了相关 – TheGameiswar

相关问题