2016-03-07 90 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

相關問題