2016-04-10 12 views
-2

sqlserverで任意のレコードごとに最大レコード数を検索するクエリが必要です。最大カウントレコードの間隔を見つける

たとえば、クエリも終了時間の

event | max | start time | end time 
1  | 2 | 25/1/2009 20:15:00 | 26/1/2009 00:15:00 
5  | 1 | 10/1/2009 02:15:00 | 11/1/2009 02:15:00 

が、それはです24時間以内に最後のレコードの時間だったもたらすために、私は

event | time 
----------------- 
1  | 25/1/2009 20:15:00 
1  | 25/1/2009 23:15:00 
5  | 10/1/2009 02:15:00 
1  | 26/1/2009 00:15:00 
1  | 30/1/2009 21:15:00 
5  | 10/1/2009 23:15:00 

は、私が欲しい、次の表を参照してみましょう大丈夫です。つまり、

event | max | start time | end time 
1  | 2 | 25/1/2009 20:15:00 | 26/1/2009 20:15:00 
5  | 1 | 10/1/2009 02:15:00 | 10/1/2009 23:15:00 

どのようにsql-serverを実行できますか? 私はすでにjava-appにデータベースを接続することでこれを行っていますが、純粋なSQL Serverを使用する効率的な方法が必要です。 CTEが(時間が指定された24時間以内に収まる)のテーブルからのみ関連記録を取得します

DECLARE @StartDateTime datetime 

;WITH cte AS 
(
    SELECT [event], [time] 
    FROM YourTable 
    WHERE [time] >= @StartDateTime 
    AND [time] <= DATEADD(HOUR, 24, @StartDateTime) 
) 


SELECT [event], 
     COUNT(*) As [max] 
     MIN([time]) As StartTime, 
     MAX([time]) As EndTime 
FROM CTE 
GROUP BY [event] 

を、そして2番目のクエリは、クエリによって単純なグループである:

+0

あなたは何を試しましたか?あなたはどこにいるのですか? MySqlまたはSqlサーバー。より具体的に、適切なタグを入力してください。 –

+0

間違えて申し訳ありませんが、sqlserverです。私はJavaアプリケーションとデータベースを接続しようとしましたが、そこでは動作しますが、効率的な方法ではないと思います。 – Aladdin

+0

質問は何ですか? –

答えて

0

これを試してみてください。

+0

結果は指定された時間だけ得られます。これらの境界内で指定されたイベントが最も多く出現する24時間の境界を取得したいとします。 – Aladdin

+0

あなたは単一の行を取得したいですか?あなたの質問には別段の意味があるので... –

関連する問題