0

ログアナライザ表 参考表

の表を取得したい

1> requestTime 2> NumberOfSessionsInLast15minutes

requestTime 列が同じになり、NumberOfSessions 列が過去 15 分間のセッションの合計になるテーブルを取得するためのクエリの書き方

例:

この 2012-06-06 00:12:00.0000 のセッション数は、 2012-06-06 00:12:00.0000 と (2012-06-06 00:12:00.0000) - 15 minutes の間のセッションの合計である必要があります。

4

3 に答える 3

2

サブクエリを使用して、セッション数を取得できます。

select  s1.requesttime
,       (
        select  sum(NumberOfSessions)
        from    sessions s2
        where   dateadd(minute, -15, s1.requesttime) < s2.requesttime
                and s2.requesttime <= s1.requesttime
        ) as TotalNumberOfSessions
from    sessions s1
于 2012-06-11T16:04:34.020 に答える
1
DECLARE
  @reportTime   DATETIME
SELECT
  @reportTime = '2012-06-06 00:12'

SELECT
  @reportTime,
  SUM(NumberOfSessions)
FROM
  yourTable
WHERE
      requestTime >  DATEADD(minute, -15, @reportTime)
  AND requestTime <= @reportTime

>=><および<=を、ニーズとデータの正確な動作に応じて組み合わせます。

(通常、15 分のウィンドウは になります>= 00:00 AND < 00:15が、定義はそれとは少し異なります。)


ソーステーブルのすべてのレコードに対してそれが必要な場合...

SELECT
  base.requestTime,
  SUM(history.NumberOfSessions)
FROM
  yourTable    AS base
INNER JOIN
  yourTable    AS history
    ON  history.requestTime >  DATEADD(minute, -15, base.requestTime)
    AND history.requestTime <= base.requestTime
GROUP BY
  base.requestTime
于 2012-06-11T16:03:50.183 に答える
0

これを一般的に行う方法を次に示します。特定の日の 15 分間の内訳を提供します。

DECLARE @requests TABLE(requestTime DATETIME, NumberOfSessions INT);

INSERT @requests SELECT '20120605 23:59', 2
UNION ALL SELECT '20120606 00:00', 500
UNION ALL SELECT '20120606 00:07', 400
UNION ALL SELECT '20120606 00:17', 300
UNION ALL SELECT '20120606 23:57', 500
UNION ALL SELECT '20120607 00:00', 100;

DECLARE @day SMALLDATETIME; -- this would be a stored procedure parameter
SET @day = '20120606';

;WITH n AS 
(
  SELECT TOP 96 n = DATEADD(MINUTE, 15*
  (ROW_NUMBER() OVER (ORDER BY [object_id])-1), @day)
  FROM sys.all_columns ORDER BY [object_id]
)
SELECT requestTime = n.n, SumNumberOfSessions = COALESCE(SUM(NumberOfSessions), 0)
FROM n LEFT OUTER JOIN @requests AS r
ON r.requestTime >= n
AND r.requestTime < DATEADD(MINUTE, 15, n)
GROUP BY n.n
ORDER BY requestTime;

結果:

requestTime                SumNumberOfSessions
-----------------------    -------------------
2012-06-06 00:00:00.000    900
2012-06-06 00:15:00.000    300
2012-06-06 00:30:00.000    0
...
2012-06-06 23:30:00.000    0
2012-06-06 23:45:00.000    500
于 2012-06-11T16:15:07.040 に答える