2016-04-15 238 views
0

我想要一個選擇查詢: 我有兩列 - NUMBER(= row_number())和ActionTime(日期時間) 列「結果」 - 這是我需要得到的。SQL Server。選擇日期範圍查詢

如何獲得結果:

  1. 採取的第一行,如果有行中,從目前不超過10秒,列舉了 - 1

  2. 採取以下門牌線然後重複執行步驟1

參見一個例子:

NUMBER   --- ActionTime  --- Result 
1   2016-04-15 15:43:58.387    1 
2   2016-04-15 15:44:09.413    2 
3   2016-04-15 15:44:20.470    3 
4   2016-04-15 15:44:26.520    3 
5   2016-04-15 15:44:32.567    4 
6   2016-04-15 15:44:35.600    4 
7   2016-04-15 15:44:38.657    4 

回答

0

您可以通過使用LAG()尋找到新的羣體開始在SQL Server 2012+做到這一點,那麼的累加值:

select e.number, e.actiontime, 
     sum(case when prev_at > dateadd(second, 10, actiontime) 
       then 0 else 1 
      end) over (order by actiontime) as Result 
from (select e.*, lag(actiontime) over (order by actiontime) as prev_at 
     from example e 
    ) e; 

在早期版本中,你可以使用outer apply類似的東西,但性能一般不太好。