2011-04-19 89 views
0

我需要運行一個查詢,以便在一天中第一次發生事件以及上一次事件發生在白天的時間內對記錄進行排序,並運行報告以包括記錄在系統上的歷史記錄。這是在一個SQL2005數據庫中,但我沒有找到任何東西來幫助我將事情縮小到第一次發生和最後一次發生。當天的第一個和最後一個時間

回答

1
-- 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 
相關問題