Sql server 2005 一天中的第一个和最后一个时间

Sql server 2005 一天中的第一个和最后一个时间,sql-server-2005,Sql Server 2005,我需要运行一个查询,以对当天第一次发生事件和最后一次发生事件的记录进行排序,并运行报告以在系统上包含一周的记录历史。这是在SQL2005数据库中,但我还没有找到任何东西可以帮助我将事情缩小到第一次发生和最后一次发生 -- Test data in table @T declare @T table(id int, dt datetime) insert into @T values (1, '2011-01-01T10:00:00') insert into @T values (2, '201

我需要运行一个查询,以对当天第一次发生事件和最后一次发生事件的记录进行排序,并运行报告以在系统上包含一周的记录历史。这是在SQL2005数据库中,但我还没有找到任何东西可以帮助我将事情缩小到第一次发生和最后一次发生

-- Test data in table @T
declare @T table(id int, dt datetime)
insert into @T values (1, '2011-01-01T10:00:00')
insert into @T values (2, '2011-01-01T11:00:00')
insert into @T values (3, '2011-01-01T12:00:00')
insert into @T values (4, '2011-01-02T20:00:00')
insert into @T values (5, '2011-01-02T21:00:00')
insert into @T values (6, '2011-01-02T22:00:00')

-- First day of interval to query
declare @FromDate datetime = '2011-01-01'
-- Add 7 days to get @ToDate
declare @ToDate datetime = dateadd(d, 7, @FromDate)

;with cte as 
(
  select *,
    row_number() over(partition by datediff(d, T.dt, 0) order by T.dt) as rnMin,
    row_number() over(partition by datediff(d, T.dt, 0) order by T.dt desc) as rnMax
  from @T as T
  where T.dt >= @FromDate and T.dt < @ToDate
)
select C.id, C.dt
from cte as C
where C.rnMax = 1 or C.rnMin = 1
order by C.dt