我的数据库是SQL Server 2008我有一个3列的表。姓名,类型,时间。
我需要为每个名称选择第一个(按时间 - 第3列)事件,并且类型为1。 例如,它可能是
(George,1,15:00) (乔治,3,15:00) (乔治,1,16:00) (乔治,1,16:10) (玛丽,1:15:00) (玛丽,3,15:00) (玛丽,1,16:00) (玛丽,1:16:10)
我只需要(George,1,15:00) (玛丽,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
答案 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
答案 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