2016-10-28 9 views
0

SQL ServerでSQLクエリを実行して、時間のリストを取得します。例えば時間の間に最長の時間が見つかります

00:01:45 
00:01:55 
00:02:25 
00:05:33 
00:10:45 
00:11:01 
00:13:45 

私はSQLで(クエリの出力である)上記時間の間の最大期間に表す単一の時間を返す方法をいくつかにしたいです。 SQLを介してこれを行うことは可能ですか?その場合はどうすればよいですか?

+0

の可能性のある重複:ヌル問題を克服し、従って削除する[SQL見つける最長日付ギャップ(http://stackoverflow.com/questions/1315262/sql-finding-longest-date-gap) –

答えて

3

これを行うには、解析関数LAGまたはLEADを使用できます。前の行または次の行(時刻順)の計算をDATEDIFFで実行することによって、各順序付きペアの継続時間を判断できます。残っているのはMAXです。

with Data as (
     select a.TheTime 
       , DateDiff(minute, Lag(a.TheTime, 1, a.TheTime) over(order by a.TheTime asc), a.TheTime) as Duration 
     from (values 
      (Convert(time(0), N'00:01:45')) 
      , (Convert(time(0), N'00:01:55')) 
      , (Convert(time(0), N'00:02:25')) 
      , (Convert(time(0), N'00:05:33')) 
      , (Convert(time(0), N'00:10:45')) 
      , (Convert(time(0), N'00:11:01')) 
      , (Convert(time(0), N'00:13:45')) 
     ) as a (TheTime) 
    ) 
select Max(a.Duration) as MaxDuration 
from Data as a; 
+1

ラグ機能をラグ(a.TheTime、1、a.TheTime)に変更することができます。 –

+0

@AhmedSaeed非常にエレガントです。更新しました。 – Kittoes0124

関連する問題