2017-07-12 5 views
-1

私は複雑なSQLクエリを解決してください。ここにその詳細があります。SQL Server:複雑なクエリの平均時間を取得する

enter image description here

私が付属しているスクリーンショットはすべての要件を示して考えると。システムはこのように動作します。

私は自分のアプリケーションにテキストファイルを作成しており、SQL Serverでもそれを記録しています。このファイルが作成されるとすぐに、同じ名前で別のファイルが.html拡張子で作成されます。私はSQL Serverでもhtmlファイルを記録しています。基本的には、ファイル名に基づいて行をグループ化して、単一の要求を得ることができます。

ここでSQLを使用して、これら2つのファイルの時間差を取得したいと思います。最初のリクエストでは547ミリ秒を要しています。

1分または1時間ですべてのリクエストにかかる平均時間を取得するのと同じ方法です。

SQLスクリプト

CREATE TABLE [dbo].[DebugInfo](
    [Id] [bigint] IDENTITY(1,1) NOT NULL, 
    [FileName] [varchar](250) NULL, 
    [Message] [varchar](250) NULL, 
    [Time] [datetime] NULL, 
    [UserId] [int] NULL, 
CONSTRAINT [PK_DebugInfo] PRIMARY KEY CLUSTERED 
(
    [Id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 
SET ANSI_PADDING OFF 
GO 
SET IDENTITY_INSERT [dbo].[DebugInfo] ON 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (1, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000001.txt', N'File Is LOCKED Count:- 511', CAST(0x0000A43300CF83FD AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (2, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000001.htm', N'File Is LOCKED Count:- 335', CAST(0x0000A43300CF84A1 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (3, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000002.txt', N'File Is LOCKED Count:- 672', CAST(0x0000A43300D0072D AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (4, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000002.htm', N'File Is LOCKED Count:- 1006', CAST(0x0000A43300D00895 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (5, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000003.txt', N'File Is LOCKED Count:- 254', CAST(0x0000A43300D00FC9 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (6, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000003.htm', N'File Is LOCKED Count:- 136', CAST(0x0000A43300D01001 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (7, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000004.txt', N'File Is LOCKED Count:- 772', CAST(0x0000A43300D0167E AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (8, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000004.htm', N'File Is LOCKED Count:- 181', CAST(0x0000A43300D016C5 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (9, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000005.txt', N'File Is LOCKED Count:- 347', CAST(0x0000A43300D01B65 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (10, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000005.htm', N'File Is LOCKED Count:- 117', CAST(0x0000A43300D01B8F AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (11, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000006.txt', N'File Is LOCKED Count:- 572', CAST(0x0000A43300F13506 AS DateTime), NULL) 
INSERT [dbo].[DebugInfo] ([Id], [FileName], [Message], [Time], [UserId]) VALUES (12, N'\\172.16.1.18\datadrive\vol2\SCANNING\SCAN\NovToWin\SIP1\WH000006.htm', N'File Is LOCKED Count:- 562', CAST(0x0000A43300F13632 AS DateTime), NULL) 

ここでは、私はおかげで

+1

あまりにも小さなテキスト、私はそれを読むことができません。ほとんどの人は、画像ではなく書式付きのテキストを必要とします。 – jarlh

+1

@ AbhishekK.Upadhyay - サンプルデータをイメージとして追加することは想定されていません。サンプルデータと期待される結果を常にテーブル形式のテキストとして追加します –

+1

'AVG'関数がうまくいかない理由はありますか?どのように試してみましたか、どのようなエラーがありましたか? –

答えて

4

これはあなたがやりたいんRawFileName

SELECT *, SUBSTRING((REVERSE 
(
    SUBSTRING 
    (
     REVERSE(FileName),0,CHARINDEX('\',REVERSE(FileName)) 
    ) 
)),0, CHARINDEX('.',REVERSE 
(
    SUBSTRING 
    (
     REVERSE(FileName),0,CHARINDEX('\',REVERSE(FileName)) 
    ) 
))) AS RawFileName from DebugInfo 

を生成するために使用している何ですか?

select avg(diff_ms * 1.0) 
from (select datediff(millisecond, min(time), max(time)) as diff_ms 
     from t 
     group by rawfilename 
    ) t; 
+0

クエリが返されます。集約またはサブクエリを含む式に対して集計関数を実行することはできません。 –

+0

あなたのクエリメイトをチェックしましたか? –

1
select avg(diff) 
from (select filename, DATEDIFF(MILLISECOND, Time, nextTime) as diff 
     from (select [FileName] 
        , [Time] 
        , lead(Time, 1, 0) OVER (ORDER BY id) AS nextTime 
        , row_number() over (partition by FileName order by Time) as rn 
       from [DebugInfo] 
      ) tt 
     where tt.rn = 1 
    ) ttt 

select avg(diff) 
from (select datediff(millisecond, minTime, maxTime) as diff 
     from (select min(time) as minTime, max(time) ss maxTime 
       from [DebugInfo] 
       group by rawfilename 
      ) tt 
    ) ttt; 
+0

2012年のゴードンの作品は、 – Paparazzi

+0

のSQL関数では機能しません:(また、2番目のクエリは "日付関数をオーバーフローさせました"という戻り値を返します。私が1.5の不足している行を実行するとき。 –

+0

@ AbhishekK.Upadhyay次に、精度が低い – Paparazzi

関連する問題